Django:对页面请求的url的处理方法

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:格式化的 UUID
  • path:包含 ’/’ 的完整路径名称,而不是一个相对路径

此外还可以通过 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),
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值