1. 當用戶在瀏覽器中輸入url時,瀏覽器會生成請求頭和請求體發給服務端 請求頭和請求體中會包含瀏覽器的動做(action),這個動做一般爲get或者post,體如今url之中. 2. url通過Django中的wsgi,再通過Django的中間件,最後url到過路由映射表,在路由中一條一條進行匹配, 一旦其中一條匹配成功就執行對應的視圖函數,後面的路由就再也不繼續匹配了. 3. 視圖函數根據客戶端的請求查詢相應的數據.返回給Django,而後Django把客戶端想要的數據作爲一個字符串返回給客戶端. 4. 客戶端瀏覽器接收到返回的數據,通過渲染後顯示給用戶.
urlhtml
urlpatterns = [ path('fbv/',views.fbv), path('cbv/',views.CBV.as_view()), ]
view數據庫
from django.views import View class CBV(View): def get(self,request): return render(request, "cbv.html") def post(self,request): return HttpResponse("cbv.get")
cbv.htmldjango
<body> <form method="post" action="/cbv/"> {% csrf_token %} <input type="text"> <input type="submit"> </form> </body>
在數據庫有外鍵的時候,使用 select_related() 和 prefetch_related() 能夠很好的減小數據庫請求的次數,從而提升性能
對於一對一字段(OneToOneField)和外鍵字段(ForeignKey),能夠使用select_related 來對QuerySet進行優化
對於多對多字段(ManyToManyField)和一對多字段,能夠使用prefetch_related()來進行優化
生成html form,form字段校驗