jdango 2.x的url配置的改变

新版本的url.py文件中,不在使用1.x的正则表达式,强制使用在程序启动的时候会提示:

WARNINGS:
?: (2_0.W001) Your URL pattern '^*article/' has a route that contains '(?P<', begins with a '^', or ends with a '$'. This was likely an oversight when migrating to django.urls.path().

1.x的写法

urlpatterns = [
    url('admin/', admin.site.urls),
    url('^*article/$', include('article.urls'))
]

2.x中如果要使用正则,则需要使用re_path方法

from django.urls import path, include, re_path
urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('^.*article/$', include('xxx.urls'))
]
  1. 要捕获url中的一段查询字符串,除了使用正则匹配以外,现在可以使用<>,而不是原来的()
  2. 在<>中捕获的url查询字符串,可以指定类型, 比如 path('articles/<int:year>/', views.year_archive),
    就可以将articles后面的数字匹配出来,用year参数名传递给后台,默认情况下捕获的结果保存的是字符串类型,不包含 / 这个特殊字符
  3. 匹配模式的最开头不需要添加/,因为默认情况下,每个url都带一个最前面的/
 path('articles/<int:year>/<int:month>/', views.month_archive),
/articles/2005/03/ 将匹配第三条,并调用views.month_archive(request, year=2005, month=3);

path转换器
django2.x中内置了路径转换器

str:匹配任何非空字符串,但不含斜杠/,如果你没有专门指定转换器,那么这个是默认使用的;
int:匹配0和正整数,返回一个int类型
slug:可理解为注释、后缀、附属等概念,是url拖在最后的一部分解释性字符。该转换器匹配任何ASCII字符以及连接符和下划线,比如’ building-your-1st-django-site‘;
uuid:匹配一个uuid格式的对象。为了防止冲突,规定必须使用破折号,所有字母必须小写,例如’075194d3-6885-417e-a8a8-6c931e272f00‘ 。返回一个UUID对象;
path:匹配任何非空字符串,重点是可以包含路径分隔符’/‘。这个转换器可以帮助你匹配整个url而不是一段一段的url字符串。

re_path

re_path('articles/(?P<year>[0-9]{4})/', views.year_archive),
re_path('articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/', views.month_archive),
re_path('articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-_]+)/', 

传递给视图的所有参数都是字符串类型

posted @ 2019-09-07 17:14  π=3.1415926  阅读(218)  评论(0编辑  收藏  举报