欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

92django_url

?

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了清徐免費(fèi)建站歡迎大家使用!

目錄

url 1

去掉url和static硬編碼:...1

url反向解析:...2

url命名空間:...2

django如何處理一個(gè)請求:...3

錯(cuò)誤處理:...6

?

?

?

url

?

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

def url(regex, view, kwargs=None, name=None):?? #view是function object,不是函數(shù)調(diào)用;view函數(shù)的第一參數(shù)永遠(yuǎn)是request,不探討CBV,view函數(shù)的返回值永遠(yuǎn)是HttpResponse對象,顯式或隱式;

url(r'^hello/$', hello),?? #django默認(rèn)會給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/,訪問的地址無論是否帶/都會報(bào)404;所以記住,此處定義的url,hello前沒有/,hello后要有/;

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

url(r'^polls/', include('polls.urls')),?? #項(xiàng)目中的urls.py,include里是str,在用到時(shí)才動態(tài)導(dǎo)入;

?

url反向解析:

正解析,url-->view;

反解析,view-->url;

?

>>> from django.shortcuts import reverse

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

'/polls/1/'

?

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

?

在模板中,使用url模板標(biāo)簽;

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

在更高層與處理django模型實(shí)例相關(guān)的代碼中,用get_absolute_url();

?

?

url命名空間:

app namespace和instance namespace:

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

通常使用app namespace;

若app有多個(gè)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,在項(xiàng)目下定義mysite/mysite/urls.py

?

?

instance namespace:

instance級別,名稱不可以重復(fù);

?

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如何處理一個(gè)請求:

響應(yīng)流程:

92django_url

1、項(xiàng)目啟動后,根據(jù)mysite/mysite/settings.py中ROOT_URLCONF = 'mysite.urls'決定根urlconf;

2、mysite/mysite/urls.py中urlpatterns是由drango.conf.urls.url()函數(shù)調(diào)用(或?qū)嵗┙M成的列表;

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

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

1個(gè)HttpRequest實(shí)例;

如果匹配的正則表達(dá)式返回了沒有命名的組,那么正則表達(dá)式匹配的內(nèi)容將作為位置參數(shù)提供給view;

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

5、如果沒有匹配到正則表達(dá)式,或者如果過程中拋異常,django將調(diào)用一個(gè)適當(dāng)?shù)腻e(cuò)誤處理view;

?

92django_url

92django_url

注:

圖中middlewares是一個(gè)整體,有多個(gè)功能;

?

92django_url

主路由文件的urlpatterns列表中由上至下順序查找對應(yīng)的路由規(guī)則,若有include則再進(jìn)入子的urlpatterns列表由上至下查詢;

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

?

?

?

例,多種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中捕獲一個(gè)值,只需要加上();

匹配的路徑,不需要在前面加/,因?yàn)槊總€(gè)url都有,如應(yīng)是article而不是/article;

每個(gè)正則表達(dá)式前面的r約定加上,目的告訴py這個(gè)字符串是raw原始的,字符串中的任何字符都不應(yīng)轉(zhuǎn)義;

默認(rèn)捕捉到的都是字符串;

如/article/2005/03或/article/2019/01/?blog=hi,請求將匹配urlpatterns的第3個(gè)元素,django將調(diào)用函數(shù)views.month_archive(request,'2005','03');

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

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

/article/2003,不匹配任何一個(gè)模式;

如/article/2019/01/03/,請求將調(diào)用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')),?? #捕獲,參數(shù)的繼承

?

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

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

?

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

?

?

錯(cuò)誤處理:

?

當(dāng)django找不到一個(gè)匹配請求的url正則表達(dá)式時(shí),或當(dāng)拋出一個(gè)異常時(shí),django將調(diào)用一個(gè)錯(cuò)誤處理view;

?

默認(rèn)錯(cuò)誤處理view,django.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 += [...]?? #常用,便于分組;

?

?

?

?

?

網(wǎng)頁標(biāo)題:92django_url
鏈接地址:http://www.chinadenli.net/article38/piiisp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)網(wǎng)站制作動態(tài)網(wǎng)站商城網(wǎng)站網(wǎng)站建設(shè)標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化