reuqest url处理方法
常用的包括:
- 使用
<>
转换器进行变量捕捉 - 自定义类型转换器
- 正则表达式
- c o n t i n u e … continue\dots continue…
<> 捕捉变量
urlpatterns = [
# 一般情况下,include 不会对包含 GET 和 POST 请求参数的后续内容进行处理,但是
# 可以通过 '<>' 对传递的参数进行捕捉,然后传递给视图文件 views.py 中的对应函数
# 并将捕捉到的参数,按照顺序传递给参数列表,如请求:/profile/icexk/,那么 Django 将
# 调用 views.show(request, 'icexk')
path('profile/<str:username>', views.show, name='profile'),
]
<type:parameter>
即为类型转换器,其中 type
包括了:
str
:匹配非空字符int
:匹配自然数slug
:ASCII 字符串,包括'-'
和'_'
uuid
:格式化的 UUIDpath
:包含’/’
的完整路径名称,而不是一个相对路径
此外还可以通过 converter
类来自定义转换器,这个类包括了:
regex
:字符串,正则表达式to_python(self, value)
:定义如何将匹配的字符串转换成 python 中对应的类型来传递给views.py
中的函数to_url(self, value)
:定义如何将 python 类型转换为在 url 中使用的对应的字符串
官方文档上面的例子:
class FourDigitYearConverter:
regex = '[0-9]{4}'
def to_python(self, value):
return int(value)
def to_url(self, value):
return '%04d' % value
然后在你的 UrfConf
中注册这个类:
from . import converters, views
# 注册自定义转换器
register_converter(converters.FourDigitYearConverter, 'yyyy')
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<yyyy:year>/', views.year_archive),
...
]
正则表达式
可以使用不命名的正则表达式,即我们常见的:
urlpatterns = [
# 通过正则表达式进行的匹配,后续同上
path(r'some regular expression', views.function, name='some_app'),
]
常用的为命名的正则表达式, '.../?P<name>pattern/...'
即为 Python 的正则表达式,其中 name
即为这个正则表达式的命名,pattern
即为这个正则表达式的模式,例如:
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
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),
]