前言:
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撥號 的文章,剛好我又是用這種方式上網,於是想到了乙個對付豆瓣反爬蟲...