07-视图与URL配置进阶

d:/python/demo3

目标

  • 路径参数(restful)

路径参数

第1个列子

1)formapp/urls增加如下配置

path('articls//',views.year_test)

2)views.py增加如下函数

def year_test(request,year):
return render(request, 'success.html', {'year': year})

3) success.html增加如下代码

{{ year }}

3)启动服务并测试

http://127.0.0.1:8000/forms/articls/2000/

第2个例子

1)formapp/urls增加如下配置

path('articls////',views.month_test)

2)views.py增加如下函数

def month_test(request,year,month,slug):
return render(request, 'success.html', {'year': year,'month':month,'name':slug})

3) success.html增加如下代码

{{ year }}
{{ month }}
{{ name }}

3)启动服务并测试
python manage.py runserver

http://localhost:8000/forms/articls/2000/12/wangqj/

代码说明:以下路径转换器默认可用

str - 匹配除了路径分隔符'/'的任意非空字符串。 如果表达式中没有包含转换器,那么这将是默认行为。
int - 匹配0或任意正整数。 并作为 int 返回。
slug - 匹配任意的黏接字符串(slug string),这些黏接字符串是ASCII的字母或数字,词与词之间由连字符或下划线黏接组成。 例如, building-your-1st-django-site。
uuid - 匹配一个格式化的 UUID. 为了防止多个URL映射到同一页面,必须包含多个破折号(dash),同时字母必须小写。 例如, 075194d3-6885-417e-a8a8-6c931e272f00. 返回一个UUID实例。
path - 匹配包含路径分隔符 '/'在内的任意非空字符串。 相对于str,这允许你匹配一个完整的URL路径,而不仅仅是URL路径的一部分。

正则表达式

如果路径和转换器语法不足以定义你的URL模式,你还可以使用正则表达式。为了使用正则表达式,请使用re_path(),而不要使用path()。

  • 语法
    在Python正则表达式中,命名正则表达式组的语法是 (?Ppattern), 这里 name 是表达式组的名字 而 pattern 是要匹配的模式。
  • 例子
    1)formapp/urls增加如下配置
    from django.urls import path,re_path
    re_path('articls/(?P[0-9]{4})/(?P[0-9]{2})/(?P[0-9]{2})/(?P[\w_-]+)/',views.day_test)

2)views.py增加如下函数

    def day_test(request,year,month,day,slug):
return render(request, 'success1.html', {'year': year,'month':month,'day':day,'name':slug})

3) success1.html增加如下代码

{{ year }}
{{ month }}
{{ day }}
{{ name }}

3)启动服务并测试
python manage.py runserver

http://localhost:8000/forms/articls/2000/12/31/wang-qj/

这完成了与前面的例子大致相同的事情,但是校验更严格。比如年份只能是4位,月只能是两位,日只能是两位

你可能感兴趣的:(07-视图与URL配置进阶)