Django从理论到实战(part9)--path和re

    技术2022-09-02  79

    学习笔记,仅供参考

    参考自:Django打造大型企业官网;

    本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写一下。


    path和re_path

    path函数

    语法

    path(route,view,name=None,kwargs=None)

    参数讲解

    route参数

    该参数指定了url的匹配规则。

    我们在该参数中,可以指定url需要传递的参数,比如在访问文章详情页的时候,可以传递一个id。传递参数是通过<>尖括号来进行指定的,并且在传递参数的时候,可以指定这个参数的数据类型(如果没有指定任何数据类型则默认为str类型),比如文章的id都是int类型,那么可以写成 <int:id>的形式,在匹配的时候,就只会匹配到id为int类型的url,而不会匹配其他数据类型的url。

    几个常用的数据类型:

    数据类型解释底层正则形式str非空的字符串类型,默认的转换器,但是不能包含斜杠/[^/]+int匹配任意的零或者正数的整形,到视图函数中就是一个int类型[0-9]+slug由英文中的横杠-,或者下划线_连接英文字符或者数字而成的字符串[-a-zA-Z0-9_]+uuid匹配uuid字符串,使用UUID类生成的字符串,是全球唯一的字符串[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}path匹配非空的英文字符串,可以包含斜杠/.+ view参数

    该参数可以为一个视图函数,或者是类视图.as_view(),或者是django.urls.include()函数的返回值。

    name参数

    这个参数是给url取个名字,在项目比较大时,url比较多时,设置该参数用处很大。

    kwargs参数

    有时候想给视图函数传递一些额外的参数,就可以通过kwargs参数进行传递。这个参数接收一个字典,会通过关键字参数的方式传到视图函数中去,比如以下的url规则:

    from django.urls import path from . import views urlpatterns = [ path('blog/<int:year>/', views.year_archive, {'foo': 'bar'}), ]

    那么以后在访问http://127.0.0.1:8000/blog/2020/的时候,会将foo=bar作为关键字参数传给year_archive函数。

    re_path函数

    有时候我们在写url匹配的时候,想要写使用正则表达式来实现一些复杂的需求,那么这时候我们可以使用re_path来实现。

    re_path的参数和path一样,只不过第一个参数route可以为一个正则表达式,比如:

    from django.contrib import admin from django.urls import path from . import views from django.urls import re_path #.表示从当前包里导入 urlpatterns = [ path('admin/', admin.site.urls), re_path(r'year/(\d{4})/', views.year), re_path(r'birthday/(\d{4})/(\d{1,2})/(\d{1,2})/', views.page_birth), re_path(r'bunny/(?P<age>\d{1,2})/(?P<name>\w+)/', views.page_bunny), re_path(r'post_test/$', views.post_test), ]

    以上例子中我们可以看到,所有的route字符串前面都加了一个r,表示这个字符串是一个原生字符串。在写正则表达式中是推荐使用原生字符串的,这样可以避免在python这一层面进行转义。

    使用正则表达式捕获参数时,我们需要用一个圆括号对正则表达式进行包裹,参数名需要通过尖括号 <> 进行包裹,并在尖括号 <> 前加上?P。

    Processed: 0.010, SQL: 9