django.http.response.HttpResponseBase
的子类的对象。setting.py
文件中配置了ROOT_URLCONF
为urls.py
因此Django会去urls.py
urls.py
中咱们全部的映射,都应该放在urlpattenrs
这个变量中.path
函数或者re_path
函数进行包装的.<参数名>
的方式能够传递参数.urlpatterns = [ path('admin/', admin.site.urls), path('book/<book_id>/', views.book), ] def book(request,book_id): text = '书的id是%s' % book_id return HttpResponse(text)
request.GET.get('参数名称')
的方式来获取.示例代码以下:def authoer_detail(request): author_id = request.GET('id') text = '做者的id是:%s' % author_id return HttpResponse(text) pass
由于查询字符串使用的是GET
请求,因此咱们经过request.GET
来获取参数.而且由于
GET
是一个相似字典的数据类型,因此获取值跟字典的方式都是同样的.javascript
/
觉得全部的字符都是能够的.uuid.uuid4()
这个函数返回的字符串的格式.若是项目变得愈来愈大.那么url会变得愈来愈多.若是都放在了住urls.py
文件中,那么将
不太好管理,所以咱们能够将每一个app本身的urls都放到本身的app中进行管理.通常咱们会在app中
新建一个urls.py文件用来存储全部和这个app相关的子url.
须要注意的地方:
1. 应该使用include
函数包含子urls.py
,而且这个urls.py
的路径是相对于项目的路径.
示例代码以下html
urlpatterns = [ path('admin/',admin.site.urls), path('book',include('book.urls')) ]
2. 在app
的urls.py
中,全部的url匹配也要放在一个叫作urlpatterns
的变量中,不然找不到
3. url
是会根据主urls.py
和app中的urls.py
进行拼接的,所以注意不要多加斜杠/
.java
1.include(module,namespace=None):
* module: 子url的模块字符串.
* namespace:实例命名空间.这个地方须要注意一点.若是制定实例命名空间,那么前提必需要先制定应用命名空间,也就是在子urls.py
中添加app_name
变量.
2. include((pattern_list,app_namespace),namespace=None):include
函数的第一个参数既能够为一个字符串,也能够为一个元组.若是是元组,那么元组的第一个参数是子urls.py
模块的字符串,元组的第二个参数是应用命名空间.也就是说,应用命名空间既能够在子urls.py
中经过app_name
制定,也能够在include
函数中制定.
3. include(pattern_list):pattern_list
是一个列表,这个列表中装的是path
或者re_path
函数.实例代码以下:python
urlpatterns = [ path('admin/',admin.site.urls), # 没有制定应用命名空间,直接制定的是实例命名空间 path('book/',include(('book.urls','book'))), path('movie/',include([ path('',views.movie), path('list/',views.movie_list), ])) ]
由于url是常常变化的,若是在代码中写死,那么后期更改会很是的麻烦.给url取个名字,之后使用url的时候就使用他的名字进行反转就能够了,就不须要写死url了.ios
在path
函数中,传递一个name
参数就能够制定.示例代码以下:web
urlpatterns = [ path('',views.index,name='index'), path('login/',views.login,name='login') ]
在多个APP之间,有可能产生同名的url,这时候为了不反转url的时候产生混淆,可使用应用命名空间,来作区分.定义应用命名空间很是简单,只要在app
的urls.py
中定义一个叫作app_name
的变量,来制定这个应用的命名空间便可.示例代码以下:django
# 应用命名空间 app_name = 'front'
之后在作反转的时候就可使用应用命名空间:url名称
的方式进行反转.示例代码以下:api
login_url = reverse('front:login')
一个app,能够建立多个实例.可使用多个url映射同一个app,全部这就会产生一个问题.之后在作反转的时候,若是使用应用命名空间,那么就会发生混淆.为了不这个问题,咱们可使用实例命名空间.实例命名空间也是很是简单的,只要在include
函数中传递一个namespace
变量便可.示例代码以下:markdown
URLpatterns = [ path('admin/',admin.site.urls), path('',include('frons.urls')), # 同一个app 下you两个实例 path('cms1/',include('csm.urls',namespace='cms1')), path('cms2/',include('csm.urls',namespace='cms2')), ]
之后在作反转的时候,就能够根据实例命名空间来制定具体的url.示例代码以下:app
def index(request): username = request.GET.get("username") if username: return HttpResponse('CMS首页') else: # 获取当前的命名空间 current_namespace = request.resolver_match.namespace return redirect(reverse('%s:login'%current_namespace))