ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Django】第03回 生命周期、路由匹配、反向解析、名称空间

2022-09-01 23:31:26  阅读:219  来源: 互联网

标签:03 匹配 Django 反向 path 解析 reg 路由


目录

1. 用户数据的增删改查

详情链接:https://www.cnblogs.com/cainiaozhy/p/16647597.html

2. Django请求生命周期流程图

3. 路由匹配

3.1 path斜杠

1.path

结构:path('网址后缀',函数名)
一旦网址后缀匹配上了就会自动执行后面的函数,并结束整个路由的匹配

2.路由结尾的斜杠

1. 默认情况下不写斜杠,django会做二次出处理
   第一次匹配不上,会让浏览器加斜杠再次请求
2. django配置文件中可以指定是否自动加斜杠
   控制结尾是否加斜杠:APPEND_SLASH = False

3.2 path转换器

1.path转换器流程

1.当网址后缀不固定的时候 可以使用转换器来匹配
2.第一个前缀必须是func已经写死
3.第二个没有写死,可以写任何数字,如果不是数字,则会提示没有这样的后缀
4.转换器匹配到的内容会当做视图函数的关键字参数传入func(request,year=int(后缀))
5.转换器有几个叫什么名字 那么视图函数的形参必须对应,eg:def func(request,year,info):

2.path五种转换器

str:  StringConverter(), 匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int:  IntConverter(),    匹配正整数,包括0
slug: SlugConverter(),   匹配字母、数字、下划线以及横杠组成的字符串
uuid: UUIDConverter(),   匹配格式化的uuid,如 194d3-685-47e-a8a8-6c931e272f00
path: PathConverter(),   匹配任何非空字符串,包含了路径分隔符(/),不能用"?"

3.3 正则匹配无名分组、有名分组

1.re_path正则匹配

结构:re_path(正则表达式,函数体)
特点:一旦网址后缀的正则能够匹配到内容就会自动执行后面的函数,并结束整个路由的匹配 
限制开头结尾:re_path('^test/$', views.test)
当网址后缀不固定的时候 可以使用转换器来匹配

2.正则匹配之无名分组

re_path('^test/(\d+)/(.*?)/', views.test)
正则表达式匹配到的内容会当做视图函数的位置参数传递给视图函数

3.正则匹配之有名分组

re_path('^test/(?P<year>\d+)/(?P<others>.*?)/', views.test)
正则表达式匹配到的内容会当做视图函数的关键字参数传递给视图函数

4.django版本区别

1.在django1.11中 只支持正则匹配 并且方法是 url()
2.django2,3,4中  path()  re_path() 等价于 url()

4. 反向解析

4.1 反向解析语法

应用:页面上提前写死了很多路由 一旦路由发送变化会导致所有页面相关链接失效。
解决:为了防止出现该问题 我们需要使用反向解析
定义:返回一个结果 该结果可以访问到对应的路由

1.路由对应关系起别名
  path('register/', views.reg, name='reg_view')
2.使用反向解析语法
  html页面: {% url 'reg_view' %}
  后端:from django.shortcuts import reverse
       reverse('reg_view')
ps:反向解析的操作三个方法都一样path() re_path() url()

4.2 无名有名反向解析

urls.py:   path('reg/<str:info>/', views.reg, name='reg_view')
当路由中有不确定的匹配因素 反向解析的时候需要人为给出一个具体的值
views.py:  reverse('reg_view', args=('jason',))
html:      {% url 'reg_view' 'jason' %}
ps:反向解析的操作三个方法都一样path() re_path() url()

5. 路由分发

特点:django中的应用都可以有自己独立的,urls.py templates文件夹,static文件夹
应用:能够让基于django开发的多个应用完全独立,当项目特别大,应用特别多的时候,可以使用路由分发,非常方便,便于小组开发,
总路由:
      path('app01/', include('app01.urls')),
      path('app02/', include('app02.urls')),
分路由:
      path('after/', views.after)  # app01
      path('after/', views.after)  # app02

6. 名称空间

有路由分发场景下多个应用在涉及到反向解析别名冲突的时候无法正常解析
解决方式1
	名称空间 namespace
        path('app01/', include(('app01.urls', 'app01'), namespace='app01'))
        path('app01/', include(('app01.urls', 'app02'), namespace='app02'))
解决方式2
	别名不冲突即可

标签:03,匹配,Django,反向,path,解析,reg,路由
来源: https://www.cnblogs.com/cainiaozhy/p/16648194.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有