91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

92django_url

發布時間:2020-08-18 05:22:05 來源:網絡 閱讀:186 作者:chaijowin 欄目:編程語言

?

目錄

url 1

去掉urlstatic硬編碼:... 1

url反向解析:... 2

url命名空間:... 2

django如何處理一個請求:... 3

錯誤處理:... 6

?

?

?

url

?

mysite/mysite/urls.py?? #入口url

def url(regex, view, kwargs=None, name=None):?? #viewfunction object,不是函數調用;view函數的第一參數永遠是request,不探討CBVview函數的返回值永遠是HttpResponse對象,顯式或隱式;

url(r'^hello/$', hello),?? #django默認會給url后加/,此處定義,hello前不帶/hello后一定要有/,這樣即使用戶訪問http://127.0.0.1:8000/hello也會自動跳到http://127.0.0.1:8000/hello/上;若此處配置為r'^hello$',用戶訪問http://127.0.0.1:8000/hello/,訪問的地址無論是否帶/都會報404;所以記住,此處定義的urlhello前沒有/hello后要有/

url(r'^$', views.index, name='index')?? #app中的urls.py,可通過name反解出url

url(r'^polls/', include('polls.urls')),?? #項目中的urls.pyinclude里是str,在用到時才動態導入;

?

url反向解析:

正解析,url-->view

反解析,view-->url

?

>>> from django.shortcuts import reverse

>>> reverse('detail',kwargs={'question_id':1})?? #可以根據路由名稱,返回具體的路徑;未指明namespace的,用reverse(路由name);指明namespace,用reverse(命名空間namespace:路由name);路由nameviews.方法名

'/polls/1/'

?

另,reverse_lazy(),為解決循環依賴;

?

在模板中,使用url模板標簽;

py代碼中,使用django.core.urlresolvers.reverse()

在更高層與處理django模型實例相關的代碼中,用get_absolute_url()

?

?

url命名空間:

app namespaceinstance namespace

方便查找特定view的具體路徑信息;

通常使用app namespace

app有多個include,使用instance namespace

?

app namespace

?

mysite/polls/urls.py?? #1,建議使用,在app_name/urls.py中定義

app_name = 'polls'

?

mysite/mysite/urls.py

url(r'^polls/', include('polls.urls', app_name='polls')),?? #2,在項目下定義mysite/mysite/urls.py

?

?

instance namespace

instance級別,名稱不可以重復;

?

mysite/mysite/urls.py?? #總路由文件

url(r'^polls/', include('polls.urls', namespace='polls')),

?

?

例:

mxonline/organization/urls.py?? #某一app

urlpatterns = [

??? url(r'^list/$', OrgView.as_view(), name='org_list'),

??? url(r'^add_ask/$', AddUserAskView.as_view(), name='add_ask'),

]

?

mxonline/mxonline/urls.py?? #總路由文件

??? url(r'^org/', include('organization.urls', namespace='org')),

?

?

?

django如何處理一個請求:

響應流程:

92django_url

1、項目啟動后,根據mysite/mysite/settings.pyROOT_URLCONF = 'mysite.urls'決定根urlconf

2mysite/mysite/urls.pyurlpatterns是由drango.conf.urls.url()函數調用(或實例)組成的列表;

3django依次匹配每個url模式,在與請求的url匹配的第一個模式停下來;

4、一旦其中的一個正則表達式匹配上,django將導入并調用給出的view(是一個簡單的py函數或一個基于類的view),view將獲得如下參數:

1HttpRequest實例;

如果匹配的正則表達式返回了沒有命名的組,那么正則表達式匹配的內容將作為位置參數提供給view

關鍵字參數由正則表達式匹配的命名組組成,但可被django.conf.urls.url()的可選參數kwargs覆蓋;

5、如果沒有匹配到正則表達式,或者如果過程中拋異常,django將調用一個適當的錯誤處理view

?

92django_url

92django_url

注:

圖中middlewares是一個整體,有多個功能;

?

92django_url

主路由文件的urlpatterns列表中由上至下順序查找對應的路由規則,若有include則再進入子的urlpatterns列表由上至下查詢;

由上至下的順序,有可能上面的路由屏蔽掉下面的路由,帶來非預期的結果;

?

?

?

例,多種url

urlpatterns = [

???????? url(r'^article/2003/$', views.special_case_2003),

???????? url(r'^article/([0-9]{4})/$', views.year_archive),

???????? url(r'^article/([0-9]{4})/([0-9]{2})/$', views.month_archive),

???????? url(r'^article/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),

]

注:

若要從url中捕獲一個值,只需要加上()

匹配的路徑,不需要在前面加/,因為每個url都有,如應是article而不是/article

每個正則表達式前面的r約定加上,目的告訴py這個字符串是raw原始的,字符串中的任何字符都不應轉義;

默認捕捉到的都是字符串;

/article/2005/03/article/2019/01/?blog=hi,請求將匹配urlpatterns的第3個元素,django將調用函數views.month_archive(request,'2005','03')

/article/2019/1/不匹配任何模式;

/article/2003/將匹配列表第一個元素,不是第二個,按順序依次匹配;

/article/2003,不匹配任何一個模式;

/article/2019/01/03/,請求將調用views.article_detail(request,year='2019',month='01',day='03')

?

例,url多種組合:

url(r'^community/', include('django_website.aggregator.urls')),

url(r'^contact/', include('django_website.contact.urls')),

?

url(r'^reports/(?P<id>[0-9]+)/$', credit_views.report),

url(r'^charge/$', credit_views.charge),

?

url(r'^$', main_views.homepage),

url(r'^help/', include('apps.help.urls')),

url(r'^credit/', include(extra_patterns)),

?

url(r'^(?P<page_slug>[\w-]+)-(?P<page_id>\w+)/', include([

???????? url(r'^history/$', views.history),

???????? url(r'^edit/$', views.edit),

???????? url(r'^discuss/$', views.discuss),

???????? url(r'^permissions/$', views.permissions),

])),

?

url(r'^$', main_views.homepage),

url(r'^help/', include('apps.help.urls')),

url(r'^credit/', include(extra_patterns)),

?

url(r'^log/', include(other_log)),

?

url(r'^(?P<username>\w+)/blog/', include('foo.urls.blog')),?? #捕獲,參數的繼承

?

url(r'^$', views.blog.index),

url(r'^archive/$', views.blog.archive),

?

url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),?? #傳遞額外選項

?

?

錯誤處理:

?

django找不到一個匹配請求的url正則表達式時,或當拋出一個異常時,django將調用一個錯誤處理view

?

默認錯誤處理viewdjango.conf.urls中:

handler400 = 'django.views.defaults.bad_request'

handler403 = 'django.views.defaults.permission_denied'

handler404 = 'django.views.defaults.page_not_found'

handler500 = 'django.views.defaults.server_error'

?

?

?

urlpatterns = [...]

urlpatterns += [...]?? #常用,便于分組;

?

?

?

?

?


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

雅江县| 盐津县| 铅山县| 嵊泗县| 安远县| 西丰县| 丰原市| 松滋市| 逊克县| 娄底市| 斗六市| 余姚市| 鹤山市| 延安市| 怀仁县| 郓城县| 乡城县| 隆安县| 六枝特区| 平谷区| 通化县| 永嘉县| 勃利县| 饶河县| 门源| 当阳市| 乐平市| 新余市| 紫云| 钦州市| 舟山市| 长武县| 九龙坡区| 潢川县| 保定市| 平利县| 金山区| 綦江县| 和田县| 平湖市| 龙岩市|