Django路由系统-URLconf配置、正则表达式简述

Django路由系统

1.11版本官方文档

​ URL配置就像是Django项目的目录,它的本质是URL与URL调用的函数之间的映射表,Django会根据URL配置,在遇到一个URL时,就去执行相应的函数。

URLconf配置

基本格式

from django.conf.urls import url

urlpatterns = [
url(正则表达式, views视图,参数,别名),
]

【示例】

from django.conf.urls import url
from . import views urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]

参数说明

  1. 正则表达式:对应一个字符串形式正则表达式
  2. views视图:一个可调用的函数,通常是一个视图函数
  3. 参数:可选项,字典形式,要传递给视图函数的默认参数
  4. 别名:可选项,name参数

2.0版本中的路由系统的写法

from django.urls import path,re_path
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),
] 2.0版本中的re_path和1.11版本的url用法相同

正则表达式概述

基本配置

urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]

注意事项

  1. urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续;
  2. 若要从URL中捕获一个值,只需要用()将值包括起来即可(分组匹配);
  3. 不需要添加一个前导的反斜杠,因为每一个URL都有一个,比如:应该是^articles 而不是 ^/articles;
  4. 每个正则表达式前面的r都是可选项,但是建议加上。

补充说明

​ Django settings.py配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为 APPEND_SLASH = True。 其作用就是自动在网址结尾加'/',在浏览器访问的地址后面不为/时,会自动跳转至带有/的路径的配置项。

from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^jjzz/$', views.Index.as_view()),
url(r'^fileupload/$', views.Upload.as_view()),
]

​ 如上段代码所示,当我们访问访问 http://www.example.com/jjzz 时,默认情况下,Django会自动在网址后补加一个/,转换成http://www.example.com/jjzz/,如下图

Django路由系统-URLconf配置、正则表达式简述

​ 如果是在settings中设置了APPEND_SLASH=False,再请求 http://www.example.com/jjzz 就会提示找不到页面。(所用格url为笔者举例使用!)

上一篇:Django路由系统-分组命名匹配


下一篇:cdnbest补充api