python開發路由器 Django之路由分配系統

2021-10-13 08:02:21 字數 3750 閱讀 6964

前言:

django大致工作流程

1、客戶端傳送請求(get/post)經過web伺服器、django中介軟體、 到達路由分配系統

2、路由分配系統根據提取 request中攜帶的的url路徑(path)與檢視函式對映關係列表中,匹配到1個檢視函式,foo(request)執行;

3、檢視函式 使用原生sql或者orm去資料庫拿到資料,在服務端進行渲染(模板+資料渲染)

4、檢視函式return乙個 response物件 返回客戶端

django路由分配系統簡介

django project目錄中的urls.py檔案中, 以python [ (   )  ]的資料型別記錄了可以訪問到該站點的url 和 檢視函式一一對應關係表,當request請求到達路由系統,django通過request中攜帶的path 遍歷這個關係表,匹配到對應的檢視函式,break;(所以1個 url 只能從路由關係表中自上而下匹配到1個檢視函式)

start_response('200 ok', [('content-type', 'text/html')])

path=environ.get('path_info')print(path)

urloattern=routers()

func=nonefor i inurloattern:if path==i[0]:

func=i[1]break

iffunc:returnfunc(environ)else:return [b'404']if __name__ == '__main__':

t.serve_forever()

view code

本文主要介紹 django路由分配系統

一、django的路由分配系統

1個url對應1個檢視函式

from django.conf.urls import url

from django.contrib import admin

urlpatterns = [

url(r'^modal/',view.modal), url(r'^網域名稱',對應的處理函式) 注意不要忘了寫 ^ 表示正則匹配以。。開頭的url

url(r'^modal_add/',view.modal_add),

url(r'^modal_del/',view.modal_del),

url(r'^modal_edit/',view.modal_edit),

二、在客戶端通過url中的 path向後端傳引數

在前端我們不僅可以通過get請求攜帶引數的方式向server端傳資料;

django也允許通過,path路徑的方式向server端傳值;

注意事項:按位置,和按關鍵字路由系統只能用1種,不能混合使用;

1、path正則無名分組匹配《---------》檢視函式按位置傳參

urlpatterns=[

url(r'^index/(\w+)/(\w+)/',views.index2), #醬紫的話客戶端 輸入:也可以訪問到該站點

url(r'^',views.error)

urlpatterns = [

url(r'^/',index), #檢視函式 index(request)

url(r'^(\d)/\d/$',timeer1), #檢視函式 timeer1(request,實參1) 正則增加了分組,檢視函式會增加乙個引數;

url(r'^(\d)/(\d)/(?p\d)/$',timeer),

在路由系統定義了 幾個正則分組(),在檢視函式對應幾個實參接收;

def timeer2(request,a1,a2):

print(a1,a2) #列印引數a1,a2 就是 2個正規表示式匹配到的結果

#注意如果按位置傳參的動態路由系統,必須在檢視函式新增對應的引數接收!

2、path正則有名分組匹配《---------》檢視函式按關鍵字傳參

按位置傳參形參或實參錯位會導致資料錯亂,所以django路由分發系統還可以以命名分組的形式匹配url給檢視函式按關鍵字傳參;

urlpatterns=[

url(r'^index/(p\w+)/(p\w+)/',views.index,name="zhanggen"),

url(r'^(?p\d)/(?p\d)/$',timeer),

url(r'^',views.error), ]#注意如果在路由系統正則內部定義了關鍵字n1,n2,檢視函式接收引數也必須是 n1,n2;

urlpatterns = [

# url(r'^/',index), #index(request)

# url(r'^(\d)/\d/$',timeer), #timeer(request,2014) 正則增加了分組,檢視函式會增加乙個引數;

# url(r'^(\d)/(\d)/$(?p\d)',timeer2) #timeer(request,year=2017,month=6) 正則設定了有名分組,檢視函式使用關鍵字傳參

在檢視函式定義2個關鍵字引數, 接收 2個正規表示式匹配到的字尾;

defindex(request,n1,n2):print(n1,n2) #注意必須和 路由系統中的一致return httpresponse('ok')

3、url path傳值應用

有了動態路由就 可以不用在  url?nid=8這樣傳值了!

ps:終止符:^edit$  可以精確限制匹配url的字尾內容

url(r'^student_del/(.*).html/',views.student_del),

刪除defstudent_del(request,args1):#user_id=request.get.get('id')

models.user_info.objects.filter(id=args1).delete()return redirect('/students/')

三、路由分發

urlpatterns=[

url(r'^',views.error),

醬紫就可以在每個 django目錄下面寫自己的 url了

四、路由別名(應用站點許可權管理)

1、什麼是路由別名?

給django路由分發系統 url--檢視函式對應關係命個名,

然後在模板中反生成 訪問該站點url,

或者在檢視函式中reverse()反向生產當前訪問url;

2、作用

保證前後端資料一致性,後端修改了匹配url,不用在前段更改;

urlpatterns=[url(r'^index/(?p\w+)/(?p\w+)/',views.index,name="alex"), 給這個url起別名 alex

url(r'^',views.error),

在檢視函式使用reverse("別名", args=(1, 2)) 反生 位置引數動態路由的 別名

defindex(request,n1,n2):print(reverse("zhanggen", args=(1, 2)))return render(request,'index.html',)

在檢視函式使用reverse("別名",kwargs=反生 關鍵字引數動態路由的 別名

defindex(request,n1,n2):print(reverse("zhanggen",kwargs=))return render(request,'index.html',)

在模板中反生 url

注意 在檢視函式中return render(request,'index.html',)

title

}

路由器連線路由器

有兩種方法!無論哪種,和貓接的主路由總是不變!只要改從路由的設定!第一。從路由還是當路由用!設定 路由a為主路由,路由b為從路由!假設你現在有兩個路由 路由a 和 路由b 同時使用的是adsl撥號上網。首先,設定路由a的wan口狀態設定為pppoe撥號狀態,然後填入adsl撥號的賬號和密碼。然後,設...

無線路由器連線路由器

接觸過寬頻路由器的使用者,大抵都了解寬頻路由器上的埠有wan口和lan口之分。寬頻路由器在工作過程中有這樣乙個特點 從lan到wan方向上的資料流預設不受限制通過路由器,從wan到lan方向上預設不能通過。注 無線寬頻路由器的無線接入部分從屬於lan的範圍 也就是說,預設情況從區域網內電腦上發出的資...

用python控制路由器

最近用爬蟲爬豆瓣上的資料,無奈總是被封,agent偽裝和cookie修改這些都用過了,可惜都起不了什麼作用,到了一定次數,還是會返回403。想用 ip,無奈免費的太不穩定,買收費的又有點沒必要。今天在查資料的時候,讀到一篇談adsl撥號 的文章,剛好我又是用這種方式上網,於是想到了乙個對付豆瓣反爬蟲...