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))