快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

使用方面Django2.0在url有哪些改变

今天就跟大家聊聊有关使用方面Django2.0在url有哪些改变,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

创新互联是一家集网站建设,峨边彝族企业网站建设,峨边彝族品牌网站建设,网站定制,峨边彝族网站建设报价,网络营销,网络优化,峨边彝族网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

Django2.0发布后,很多人都拥抱变化,加入了2的行列。
但是和1.11相比,2.0在url的使用方面发生了很大的变化,下面介绍一下:

一、实例

先看一个例子:

from django.urls import path
from . import views
urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles//', views.year_archive),
    path('articles///', views.month_archive),
    path('articles////', views.article_detail),]

注意:

要捕获一段url中的值,需要使用尖括号,而不是之前的圆括号;可以转换捕获到的值为指定类型,比如例子中的int。默认情况下,捕获到的结果保存为字符串类型,不包含/这个特殊字符;匹配模式的最开头不需要添加/,因为默认情况下,每个url都带一个最前面的/,既然大家都有的部分,就不用浪费时间特别写一个了。

匹配例子:

/articles/2005/03/ 将匹配第三条,并调用views.month_archive(request, year=2005, month=3);

/articles/2003/匹配第一条,并调用views.special_case_2003(request);

/articles/2003将一条都匹配不上,因为它最后少了一个斜杠,而列表中的所有模式中都以斜杠结尾;

/articles/2003/03/building-a-django-site/ 将匹配最后一个,并调用views.article_detail(request, year=2003, month=3, slug="building-a-django-site"

二、path转换器

默认情况下,Django内置下面的路径转换器:

str:匹配任何非空字符串,但不含斜杠/,如果你没有专门指定转换器,那么这个是默认使用的;

int:匹配0和正整数,返回一个int类型

slug:可理解为注释、后缀、附属等概念,是url拖在最后的一部分解释性字符。该转换器匹配任何ASCII字符以及连接符和下划线,比如’ building-your-1st-django-site‘;

uuid:匹配一个uuid格式的对象。为了防止冲突,规定必须使用破折号,所有字母必须小写,例如’075194d3-6885-417e-a8a8-6c931e272f00‘ 。返回一个UUID对象;

path:匹配任何非空字符串,重点是可以包含路径分隔符’/‘。这个转换器可以帮助你匹配整个url而不是一段一段的url字符串。

三、自定义path转换器

其实就是写一个类,并包含下面的成员和属性:

类属性regex:一个字符串形式的正则表达式属性;

to_python(self, value) 方法:一个用来将匹配到的字符串转换为你想要的那个数据类型,并传递给视图函数。如果转换失败,它必须弹出ValueError异常;

to_url(self, value)方法:将Python数据类型转换为一段url的方法,上面方法的反向操作。

例如,新建一个converters.py文件,与urlconf同目录,写个下面的类:

class FourDigitYearConverter:
    regex = '[0-9]{4}'
    def to_python(self, value):        
        return int(value)    
    def to_url(self, value):        
        return '%04d' % value

写完类后,在URLconf 中注册,并使用它,如下所示,注册了一个yyyy:

from django.urls import register_converter, path
from . import converters, views
register_converter(converters.FourDigitYearConverter, 'yyyy')
urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles//', views.year_archive),
    ...
]

四、使用正则表达式

Django2.0的url虽然改‘配置’了,但它依然向老版本兼容。而这个兼容的办法,就是用re_path()方法代替path()方法。re_path()方法在骨子里,根本就是以前的url()方法,只不过导入的位置变了。下面是一个例子,对比一下Django1.11时代的语法,有什么太大的差别?

from django.urls import path, re_path
from . import views
urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    re_path('articles/(?P[0-9]{4})/', views.year_archive),
    re_path('articles/(?P[0-9]{4})/(?P[0-9]{2})/', views.month_archive),
    re_path('articles/(?P[0-9]{4})/(?P[0-9]{2})/(?P[\w-_]+)/', views.article_detail),
]

与path()方法不同的在于两点:

year中匹配不到10000等非四位数字,这是正则表达式决定的传递给视图的所有参数都是字符串类型。而不像path()方法中可以指定转换成某种类型。在视图中接收参数时一定要小心。

五、总结

除了上面的部分,Django2.0路由系统其它的知识点和Django1.11的基本都是相同的,就是在写法上面有那么点小小的区别。

你只需要使用from django.urls import re_path正确导入re_path()方法,并用它替换url()方法就可以了。

看完上述内容,你们对使用方面Django2.0在url有哪些改变有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


网站名称:使用方面Django2.0在url有哪些改变
文章分享:http://6mz.cn/article/geohoj.html

其他资讯