企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
转换器 --------- `path converters` -- 路径转换器 未显式指定转换器时,默认使用 `str`。 - `str`- 匹配除路径分隔符 `/` 之外的任何非空字符串。 - `int` - 匹配零或任何正整数。返回一个 int。 - `slug` - 匹配由ASCII字母或数字组成的任何slug字符串,以及连字符和下划线字符。例如:`aD-m_iN`。 - `uuid` - 匹配格式化的UUID。要防止多个URL映射到同一页面,必须包含短划线并且字母必须为小写。例如:`075194d3-6885-417e-a8a8-6c931e272f00`。返回一个 UUID 实例。 - `path`- 匹配任何非空字符串,包括路径分隔符 '/'。这使您可以匹配完整的URL路径,而不仅仅是URL路径的一部分str。 例子: ~~~ # polls/urls.py from django.urls import path from . import views urlpatterns = [ path('<uuid:uuid>/', views.uuid, name='uuid'), path('<slug:slug>/', views.slug, name='slug'), path('<prefix>/<path:path>/', views.path, name='path'), ] # polls/views.py from django.http import HttpResponse def uuid(request, uuid): return HttpResponse(str(uuid)) def slug(request, slug): return HttpResponse(slug) def path(request, prefix, path): return HttpResponse(path) ''' 匹配结果: http://127.0.0.1:8000/polls/0435671e-9c84-11e8-acca-005056c00008/ --> 0435671e-9c84-11e8-acca-005056c00008 http://127.0.0.1:8000/polls/aD-m_iN/ --> D-m_iN http://127.0.0.1:8000/polls/prefix/foo/bar/ --> foo/bar ''' ~~~ 自定义转换器 ----------------- 转换器是一个包含以下内容的类: - 属性: `regex` ,正则字符串。 - 方法: `to_python(self, value)`,将捕获值转换为指定 Python 格式。传给视图函数调用。 - 方法: `to_url(self, value)`,反向解析 URL 时,`reverse()` 间接调用,将参数转换成字符串,以生成 URL。 ~~~ class FourDigitYearConverter: regex = '[0-9]{4}' def to_python(self, value): return int(value) def to_url(self, value): return '%04d' % value ~~~ 在任意 URLconf 中使用 `register_converter()` 注册转换器: ~~~ from django.urls import path, register_converter from . import converters, views register_converter(converters.FourDigitYearConverter, 'yyyy') urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<yyyy:year>/', views.year_archive), ... ] ~~~ 匹配 URL:`http://127.0.0.1:8000/polls/articles/2014/` uuid ----- uuid 是128位的全局唯一标识符(univeral unique identifier),通常用32位的一个字符串的形式来表现。 python中自带了uuid模块来进行uuid的生成和管理工作。 - `uuid.uuid1()` -- 基于时间戳。由MAC地址、当前时间戳、随机数生成。可以保证全球范围内的唯一性,但MAC的使用同时带来安全性问题,局域网中可以使用IP来代替MAC。 - `uuid.uuid2()` -- 基于分布式计算环境DCE(Python中没有这个函数)。算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。实际中很少用到该方法。 - `uuid.uuid3(namespace, name)` -- 基于名字的MD5散列值。通过计算名字和命名空间的MD5散列值得到,保证了同一命名空间中不同名字的唯一性,和不同命名空间的唯一性,但同一命名空间的同一名字生成相同的uuid。 - `uuid.uuid4()` -- 基于随机数。由伪随机数得到,有一定的重复概率,该概率可以计算出来。 - `uuid.uuid5(namespace, name)` -- 基于名字的SHA-1散列值。算法与uuid3相同,不同的是使用 Secure Hash Algorithm 1 算法。 一般而言,在对uuid的需求不是很复杂的时候,uuid1方法就已经够用了。 ~~~ import uuid name = 'foo' namespace = uuid.NAMESPACE_URL print(uuid.uuid5(namespace, name)) ~~~