python--Django(三)視圖
阿新 • • 發佈:2018-09-05
ons ase 函數 pac res ace html () laravel
Django的視圖
不同於其他語言的MVC模式,Django采用的是MVT模式,即Model、View、Template,這裏的View其實質就是其他語言中的Controller(emmm.....),而Template其實就是html文件,所以原理其實大同小異,這裏就不多贅述
配置URL
Django中的默認路由在項目主目錄下的urls.py中,基本路由配置如下所示:
from django.urls import path, include from . import views urlpatterns = [ path(‘articles/2003/‘, views.special_case_2003), path(‘articles/<int:year>/‘, views.year_archive), path(‘articles/<int:year>/<int:month>/‘, views.month_archive), path(‘articles/<int:year>/<int:month>/<slug:slug>/‘, views.article_detail), path(‘‘, include(‘test.urls‘)) # 引入不同應用的url配置 ]
以上為普通匹配方式,其中有幾種能夠限制路由中參數類型的函數可以使用。
- str: 匹配除路徑分隔符‘/‘之外的任何非空字符串
- int:匹配零或任何正整數
- slug:匹配由ASCII字母或數字組成的任何slug字符串,以及連字符‘-‘和下劃線‘_‘字符
- uuid:匹配格式化的UUID
- path:匹配任何非空字符串,包括路徑分隔符 ‘/‘
使用正則表達式匹配
from django.urls import path, re_path from . import views urlpatterns = [ path(‘articles/2003/‘, views.special_case_2003), re_path(r‘^articles/(?P<year>[0-9]{4})/$‘, views.year_archive), # ?P<year>意為指定參數的名字 re_path(r‘^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$‘, views.month_archive), re_path(r‘^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$‘, views.article_detail), ]
URL起別名
此例相對於PHP laravel框架中的route()用法,具體用法如下
# 路由中的配置 from django.urls import path, include from test import views urlpatterns = [ path(‘‘, views.index, name=‘test-index‘), path(‘/<int:num>‘, views.getNum) path(‘‘, include(‘test.urls‘, namespace = ‘test‘)) #為include起別名 ] # 在template中的運用 <a href="{% url ‘test-index‘ 此處可以跟參數 %}"></a> # 在views中的運用 from django.http import HttpResponseRedirect from django.urls import reverse def redirect_to_year(request): year = 2006 # 參數 return HttpResponseRedirect(reverse(‘test-index‘, args=(year,)))
python--Django(三)視圖