真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何進行Django框架urls.py路由設置-創(chuàng)新互聯(lián)

如何進行Django框架urls.py路由設置,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

創(chuàng)新互聯(lián)主營齊河網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,APP應用開發(fā),齊河h5重慶小程序開發(fā)搭建,齊河網(wǎng)站營銷推廣歡迎齊河等地區(qū)企業(yè)咨詢

路由系統(tǒng)是把接收到的請求,根據(jù)網(wǎng)址進行匹配,指定處理請求的函數(shù)或類。

路由系統(tǒng)分類:

    網(wǎng)站框架路由系統(tǒng)一般分為兩類,F(xiàn)BV,CBV,Django兩者都支持,但有的框架只支持一種。

    FBV(Function Base View ): 函數(shù)基于視圖,在views.py中,使用函數(shù)處理請求。

    CBV(Class Base View):類基于視圖,在views.py中,使用處理請求。

URLS.PY文件路由配置

    兩個功能,一個是直接轉到函數(shù),一個是轉到下級urls.py路由

urlpatterns=[     path(r'blog/', blog.views.index),     path(r'bbs/', bbs.views.index) ]

    1、路由規(guī)則模塊匹配函數(shù)url,path,re_path:

      Django 1.XX使用url函數(shù),可以使用正則,可以使用固定字符串

        Django 2.XX以后使用path和re_path,

from django.conf.urls import url        # django 1.XX使用 url from django.conf.urls import url, re_path        # django 2.XX 使用 url和re_path from django.urls import path, re_path        # django 2.1X 以后集成,使用 path和re_path

        url:url()函數(shù)傳遞了四個參數(shù),兩個必需:regex和view,以及兩個可選:kwargs,和name。也就是正則表達式和視圖是兩個必填參數(shù)。

                1.xx版本--完成正則和固定匹配

                2.xx版本--保留

        path:完成指定字符串或格式的匹配,函數(shù) path() 具有四個參數(shù),兩個必須參數(shù):route 和 view,兩個可選參數(shù):kwargs 和 name。即路由和視圖是必填參數(shù)

                2.1x以后版本-- 完成固定匹配

        re_path:正則匹配,path完成不了的匹配

                2.xx版本--原生位置django.conf.urls

                            --后集成位置django.urls

    2、path函數(shù):

        格式:path(匹配規(guī)則, views視圖函數(shù)或類方法, **kwargs, name)

                 匹配規(guī)則:不支持正則,但自身提供了五種匹配模式

                       int 匹配0和正整數(shù),如 1230
                       str 匹配任何非空字符串但不包括/,
                       slug 匹配字母、數(shù)字以及橫杠、下劃線組成的字符串。

                       uuid 匹配一個uuid對象,如 075194d3-6885-417e-a8a8-6c931e272f00。(該對象必須包括破折號—,所有字母必須小寫)
                       path 匹配所有的字符串 包括/(意思就是path前邊和后邊的所有)

                      

                 views視圖或類方法:app的views.py的方法,或類方法

                 kwargs:向views傳遞的參數(shù)

                 name:后端反向解析,前端根據(jù) name值找到解析路由

    3、path--匹配規(guī)則:

         一般分為三種情況,嚴格匹配,帶參匹配,固定格式參數(shù)匹配

from django.urls import path, re_path import index.views import pathtest.views urlpatterns = [     path(r'pathtest/', pathtest.views.index),     # r'pathtest/'嚴格匹配,前端使用pathtest/ 1 2 3傳參是會報錯。     # The current path, pathtest/ 1 2 3, didn't match any of these.     path(r'pathtest  ', pathtest.views.index),     # 使用<>從url中捕獲值,pathtest/ 1,pathtest.views.index函數(shù)必須接收參數(shù),否則報錯,可以是實參,也可以是kwargs     # index() got an unexpected keyword argument 'id_1'     path(r'pathtest ', pathtest.views.index),     # 匹配str型的參數(shù),并命名為book_id,傳給views.index函數(shù)     # str,int, slug, uuid, path,五種默認的匹配模式 ]

    4、path--views視圖或類方法

        指定本條規(guī)則,處理請求的views.py的函數(shù)(FBV)或類(CBV):

        FBV:urls.py處理請求后,把請求交給函數(shù)index,index處理后,返回pathtest.html頁面給客戶端。

            urls.py

from django.urls import path, re_path import index.views urlpatterns = [     path(r'pathtest ', pathtest.views.index),     # str,int, slug, uuid, path,五種默認的匹配模式 ]

            views.py

from django.shortcuts import render def index(request,*args,**kwargs):     para = []     if kwargs:         for k,v in kwargs.items():             print(k,':',v)     if args:         for i in args:             print(i)     return render(request, 'pathtest.html', {'para': para})

        CBV:

        1、Class需要繼承django.views.generic 的View類

        2、URLS.py路由轉發(fā)到 APP.views.類.as_view()

        3、as_view()是繼承View類,不需要自己重寫

        4、查看generic\base.py 的as_view方法,看到是通過hasattr進行判斷用戶請求方式

                通過dispach 執(zhí)行相對應的請求方法函數(shù)

        5、可以通過向 http_method_names注冊 新的方法實現(xiàn)自定義

        實例:

        http://127.0.0.1:8000/pathtest1/  顯示CBV1

        http://127.0.0.1:8000/pathtest2/  顯示CBV2

        URL.py

from django.urls import path, re_path import pathtest.views urlpatterns = [     path(r'pathtest1/', pathtest.views.CBV1.as_view()),     path(r'pathtest2/', pathtest.views.CBV2.as_view()) ]

    APP:pathtest    Views.py

from django.view.generic import class CBV1(View):     def get(self,request,*args,**kwargs):         return HttpResponse('

CBV1

') class CBV2(View):     def get(self,request,*args,**kwargs):         return HttpResponse('

CBV2

')

  5、kwargs:向views傳遞的參數(shù)

            可以向views傳遞字典型參數(shù),views函數(shù)可以使用實參或形參接收,使用形參接收時,通過path函數(shù)傳遞的參數(shù)始終在url網(wǎng)址傳遞的參數(shù)前。

        urls.py

urlpatterns = [path(r'pathtest1/', pathtest.views.CBV1.as_view(),{'since':'O-K'})] # 向views.py傳遞{'since':'O-K'}

        views.py

class CBV1(View):     def get(self,request, *args, **kwargs):     # 使用實參接收def get(self,request, since, *args, **kwargs):         para = []         if kwargs:             for k,v in kwargs.items():                 print(k,':',v)                 para.append(v)         return HttpResponse('

CBV2{}

'.format(para))          # 訪問:http://127.0.0.1:8000/pathtest1/0010  # 網(wǎng)頁顯示:CBV2['O-K', 10]

      6、name: 定義后,使用{%url 'name值引用'%} ,url代指當前網(wǎng)址。

            views渲染HTML模板{%url 'name值' %}時,根據(jù)name值找到urls.py中對應的path路由,

             把path匹配規(guī)則字符串替換到 HTML模板的‘name值’

        urls.py

urlpatterns = [ path(r'pathtest1/', pathtest.views.CBV1.as_view()),                # 定義正向路由http://127.0.0.1:8000/pathtest1/訪問CBV1 path(r'pathtest2/', pathtest.views.CBV2.as_view(), name='patht')        # 使用name定義反向 # path(r'lllllllllll/', pathtest.views.CBV2.as_view(), name='patht')        # 使用name定義反向,匹配規(guī)則改變不影響name ]

        views.py

form django.shorsturc import HttpResponse, reverse class CBV2(View):     def get(self,request,page_num, *args, **kwargs):         route_path=reverse('patht', args=(page_num,))         # reverse,轉換成際的URL地址,patht是urls里的name值,轉換成匹配值         # args:地址里的參數(shù)個數(shù),幾個就寫幾個,比如四個(page_num1,page_num2,page_num3,page_num4)         print(route_path)                # 打印出來         return HttpResponse('

CBV2:
page_num:{}

'.format(page_num))      #根據(jù)點擊的鏈接不同,獲取的返回值也不同 class CBV1(View):     def get(self,request, *args,**kwargs):         return render(request, 'pathtest.html')

        html:

\\使用patht的name名來定義網(wǎng)址路由,后面的123是獲取值,所以,三個鏈接都會執(zhí)行views的CBV2 num numb/a> numbe

        結果:

            訪問:http://127.0.0.1:8000/pathtest1/,點擊html里的任何鏈接都會執(zhí)行CBV2,因為定義了name值。

      點擊任意一個鏈接,views的route_path:/pathtest2/100

    7、自定義path匹配規(guī)則。

path里默認有四個匹配規(guī)則,int,str,slug,uuid,path,

            也可以自定義匹配規(guī)則,步驟:定義類;使用register_converter 注冊;使用。

        urls.py

from django.urls import path, register_reverter import pathtest.views class NumLine: # 第一步,定義類     regex='[-0-9]+'     def to_python(self, value):         return str(value)                //可以進行類型的轉換和處理,再返回     def to_url(self, value):         return str(value)                //可以進行類型的轉換和處理,再返回 # 第二步,向轉換器里注冊自定義類,并起個名numline register_reverter(NumLine,'numline')         urlpatterns=[ path(r'pathtest1/', pathtest.views.CBV1.as_view()), path(r'ppppppppp/  ',pathtest.views.CVB2.as_view(),name='patht') # 使用自義定的numline,匹配參數(shù) ]

    APP:pathtest views.py

from django.shortcuts import HttpResponse, render, reverse from django.views.generic import View class CBV1(View):     def get(self,request):         return render(request,'pathtest.html') class CBV2(View):     def get(self,request,data1, data2):         full_path = reverse('patht',args=(data1,data2))         return HttpResponse('

Full path:{}CBV2:
page_num:{},{}

'.format(full_path, data1, data2))

        pathtest.html

number        //字符型參數(shù)傳入時,一定要加引號 number         //這里的-不報錯,因為識別成了負數(shù) number

        結果:訪問時,只識別傳入的-和0-9,其它參數(shù)報錯。

    8、path路由分發(fā)到APP的urls.py(二級路由)。

使用include方法進行指定,include從django.urls導入

          格式:path(r'pathreg/',include('app.urls'))  ,include('APP名.APP路由文件')

            project:    urls.py

from django.urls import path, include urlparrents=[ path(r'pathreg/',include('pathtest.urls')), ]

            app:     urls.py

from django.urls import path, include from pathtest import views urlparrents=[ path(r'',views.CBV1.as_view()), path(r'index/',views.CBV2.as_view()), ]

            app:        views.py

from django.shortcuts import HttpResponse from django.views.generic import View class CBV2(View):     def get(self,request):         return HttpResponse('

index page

') class CBV1(View):     def get(self, request):         return HttpResponse('

default page

')

結果:http://127.0.0.1:8000/pathreg/,經過project的urls路由文件匹配pathreg,分發(fā)到app的urls路由文件,調用CBV1顯示default page

          http://127.0.0.1:8000/pathreg/index,經過project的urls路由文件匹配pathreg,分發(fā)到app的urls路由文件匹配index,調用CBV1顯示index page

    9、re_path:支持正則匹配,其它參數(shù)與path一樣

            與Django1.xx版本的url功能一樣

path(r'', views.CBV1.as_view()), re_path(r'index$', views.CBV2.as_view()), # http://127.0.0.1:8000/pathtest/1111111111111index re_path(r'^index', views.CBV2.as_view()), # http://127.0.0.1:8000/pathtest/index1111111111111 re_path(r'index', views.CBV2.as_view()), # 這才是重點,只要包含連續(xù)的index,都會找到DBV2 re_path(r'^[a-zA-Z][_0-9a-zA-Z]{5,9}$', views.CBV2.as_view()) # 匹配以字母開頭,后面由數(shù)字或下劃線或字母組成的最短是6,最長是10個字符的路徑 # 注意:{5,9}匹配6,10個字符,因為開頭那個不算在{5,9}選項里 # http://127.0.0.1:8000/pathtest/i_d111ex11 匹配 re_path(r'^test/(?P\d+)$', views.CBV2.as_view()) # 使用()獲取url的值 # (?Pvalue)、給獲取的值,賦給name的變量,在views函數(shù)中使用def test(request,name)或def test(request,**kwargs)

    10、給CBV增加自定義提交方法:

       找到 django.views.generic .View類,

                默認提供了http_method_names列表里的方法,

                as_view函數(shù)進行了一些參數(shù)等判斷,

              最后返回了dispach方法,

                dispach通過反射(getattr)執(zhí)行相應的函數(shù)

            增加自定義提示方法:

            1)向http_method_names列表添加方法名,http_method_names.append('kill')

            2)在app.views.py里定義kill函數(shù)

            通過重寫dispach方法,給所有方法增加因定操作

    def dispatch(self, request, *args, **kwargs):         print('操作前的操作')         obj = super(Cbv,self).dispatch(request, *args, **kwargs)         print('操作后的操作代碼')         return obj

    11、命名空間:、

    namespace,app_name,name

    在project的urls配置namespace(實例命名空間),同時要在跳轉APP的urls配置 app_name(應用命名空間)

    主要是實現(xiàn)以APP名區(qū)分的路由轉發(fā)。

    # urls.py:     path('/a/', include('test.urls', namespace='author'))  # namespace   **必須          # test/urls.py:     app_name='dync_name'        # app_name,根據(jù)urls的namespace改變。          **必須在url里注冊,如果與namespace一樣默認指向namespace     re_path(r'^test/(?P\d+)/$', views.repath, name='detail')             # **name必須     path(r'test/', views.path, name='app01'),                  # views中使用 reverse生成url,reverse('author:index'),-->/a/index/                  # 帶參數(shù)的:         reverse('author:detail', kwargs={'id':666})        # kwargs里面的key似乎不是很重要,可以變成其它名         reverse('author:app01', args=[sid])                  # 模板帶參的:         {%url 'app_name:detail' id=666 %}

看完上述內容,你們掌握如何進行Django框架urls.py路由設置的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


分享文章:如何進行Django框架urls.py路由設置-創(chuàng)新互聯(lián)
瀏覽路徑:http://weahome.cn/article/cdoeso.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部