Django 的路由层URL 分组 路由分发 反向解析
URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。
其实你运行这个django项目首先进入的就是urls中 由urls来决定你下一步的走向
urlpatterns = [
path(正则表达式, views视图函数,参数,别名),
] 参数说明: 一个正则表达式字符串
一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
可选的要传递给视图函数的默认参数(字典形式)
一个可选的name参数
在django1中 一般都是使用re来进行的匹配 django都是也可以使用re_path进行匹配 也可以使用path来进行设置
url的操作就是设置你的下一步的走向的设置
分组
有名分组 可以设置你的路由的具体的名字
分发 ------>include 来把你的url内的路由地址设置为到底是谁的
反向解析 ----> reverse 搭配name 就是给你的路由起个名字让它确定具体的值 以后再改变其他的值 也不该变别名
基本url的匹配
from django.contrib import admin
from django.urls import path
from django.urls import re_path
from first import views
urlpatterns = [
path('admin/', admin.site.urls),
re_path('^index/',views.index), #导入了re_path 就可以使用正则匹配进行匹配 前面是你的匹配条件 后面是匹配的内容 就是以index开头 从views.index内匹配 re_path('^$',views.nice), #这是你的请求框 url内不用输入任何信息只需要输入ip和端口就可以访问到 views内的nice函数 re_path('^article/',views.article_year),
re_path('^article/\d{4}/$',views.article_year), #请求的内容是以article后面跟上4个数字开头的 匹配views.article_year函数 re_path('^article/2003/\d{2}$',views.lap), #这是会有重叠覆盖的 其实你现在的内容已经被第一个覆盖了 第二个也被第一个覆盖了 因为只要是开头是article的就都走views内的article_year了 不管后面的匹配项了
]
url可以用re_path利用正则的方式来进行匹配
一定要注意覆盖: 因为后面覆盖会伴随我们很久远 覆盖只要匹配到上面的一个就不会管下面的内容 就会覆盖下去
'''
NOTE:
1、一旦匹配成功则不再继续
2、若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
3、不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
4、每个正则表达式前面的'r' 是可选的但是建议加上。 一些请求的例子: /articles/2005/3/ 不匹配任何URL 模式,因为列表中的第三个模式要求月份应该是两个数字。
/articles/2003/ 将匹配列表中的第一个模式不是第二个,因为模式按顺序匹配,第一个会首先测试是否匹配。
/articles/2005/03/ 请求将匹配列表中的第三个模式。Django 将调用函数
views.month_archive(request, '2005', '03')。
'''
分组:
分组就是利用正则一样的方式进行你的匹配的条件进行分组匹配
re_path('^article/(\d{4})/(\d{2})$',views.article_year), #这个分组后你可以匹配到的是以article开头后面跟上分组后的4个数字
再跟上分组后的2个数字
#article_year(request,2000,12)
re_path('^article/(\d{4})/(\d{3})$',views.article_month), #这个也是正常的无名分组
# article_month(request,2000,12)
其实分组就是利用正则的匹配来进行分组的设定
分组后的对应的视图内的函数接受的参数也必须根据你分组的个数来设定 ,如果你的匹配项 设定的分组 是3个 那么你的的视图内的对应函数也必须设置接收3个参数 才可以
注意:
同一个视图被分组匹配后它的接收参数就改变了
re_path('^nice/',views.article_year), #这个是时候你的视图内的article函数
已经改为了 接收分组后的 参数 所以
你也要传递进去3个参数 不然就会报错
有名分组:
有名分组就是在分组的时候就给你定义好了你分组的名字 这样防止你在视图内调换组内的信息而发生改变
re_path('^article/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})', views.article_day), #这个就好比已经约定好了
它的分组内的名字你的视图无论
怎么改变接收的值都不会变的
这个就是规定好了 你的第一个传递的值的名字就是year 第二个值就是month 第三个就是day你的视图接收的顺序可以改变但是最后的结果不变
对应的视图views:
def article_day(request,year ,day,month):
return HttpResponse(year+':'+month+':'+day) 虽然视图的接收的值的顺序不对 但是值还是不变的
切忌 :你分组后的起的名字在视图内的名字也必须是这个不能改变
路由分发:
就是把每一个单独的app就是新建立的模块的路由不放在了自带的urls内了 放在新建的app内 通过自带的urls内的路由分发去找每一个app内的路由
路由分发 首先你要在分发点 urls 内法如include模块
from django.urls import include
你的 总urls的设置
re_path('^first/', include('first.urls')),
你的app新建立的urls的设置
from django.contrib import admin
from django.urls import path,re_path,include
from first import views
urlpatterns = [
re_path('^article/\d{4}/$',views.special_year),
]
你访问的url

总之你的urls的访问的时候要先加上first指定路由来查找
路由分发就是你指定的路由 然后你访问的时候也必须要加上你设置的这个指定app的路由才可以进行的访问
反向解析:
就好比一天你访问了templace里面的html的页面后 要回去提交表单 这个时候突然有人把你的表单 action更改了你怎么办? 这时候我们起别名就可以防止出错
urls的设置
re_path('login.html',views.login, name = 'lo_gin'),
views
def login(request):
if request.method == 'POST':
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == '老王' and pwd == '':
url = reverse('lo_gin') #你要再解析这个别名 然后执行下一步
print('url',url)
# return redirect(url) #这个是重新定向
return HttpResponse('登陆成功')
else:
return render(request,'login.html')
return render(request,'login.html')
templace下的html文件
<form action="{% url 'lo_gin' %}" method = 'post'>
用户名:<input type="text" name = 'user'/>
密码: <input type="password" name = 'pwd'/>
<input type="submit">
</form>
需要你再分配路由的时候的url的时候用name起个别名 然后再templace里面的html进行{% url '别名的设置'%} 在views里面对url进行reverse进行解析
解析完成后才能走下一步
Django 的路由层URL 分组 路由分发 反向解析的更多相关文章
- Django 学习 之路由层(URL)
路由层(URL) 1.路由层简单配置 (1)path方法 写固定的url. (2)re_path方法 可以正则规则 例: urlpatterns = [ path('admin/', admin.si ...
- Django之路由分发反向解析
Django路由分发|反向解析 当一个Django中有多个app时,路由会有很多,将这些路由都写在与项目同名的文件夹下就会显得很多,很乱.并且在协同开发的时候容易出现相同的命名,当项目合并后就会出现路 ...
- 分组,命名分组,url的命名和反向解析
1.位置分组 匹配到参数,按照位置参数的方式传递给视图函数 视图函数需要定义形参接收变量 1.写在url里面的: # 删除 url(r'^del_class/(\d+)',views.del_clas ...
- diango url的命名和反向解析
url的命名和反向解析 静态路由 url(r'^login/', views.login,name='login'), 反向解析ht 模板 {% url 'login' %} --> '/app ...
- URL的命名和反向解析
1. 分组 url(r'^del_publisher/(\d+)', views.del_publisher), 匹配到参数,按照位置参数的方式传递给视图函数 视图函数需要定义形参接收变量 2. 命名 ...
- Django路由之url分组(命名)匹配
分组(命名)匹配 urls.py路由配置文件中: urlspatterns中想捕获正则表达式匹配的结果用来出传递给views.py视图函数文件使用,需要用到分组匹配,或者使用第三个参数python字典 ...
- Django3 Django 路由分发,反向解析,2.0版本的path
urls配置像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行. 1.简 ...
- day 46 Django 学习3 数据库单表操作以及反向解析
前情提要: Django 已经学了不少了, 今天学习链接数据库的操作.以及相关的反向解析等 一:反向解析 1:反向解析模板层 跳转时设定url会随着前面的路由改变而改变 2:反向解析之 ...
- url的命名与反向解析
url命名和反向解析 1. 命名 # url(r'^press_list/$', views.press_list,name='press_list'), url(r'^pre/$', ...
随机推荐
- WCF系列教程之WCF服务宿主与WCF服务部署
本文参考自http://www.cnblogs.com/wangweimutou/p/4377062.html,纯属读书笔记,加深记忆. 一.简介 任何一个程序的运行都需要依赖一个确定的进程中,WCF ...
- JavaScript 缓动效果
Math.easeout = function (A, B, rate, callback) { if (A == B || typeof A != 'number') { return; } B = ...
- Linux Ubuntu系统下Java开发环境搭建
操作系统:Linux x64 / Ubuntu 14.04 Java JDK版本:jdk-8u65-linux-x64.tar.gz 声明:转载请注明出处及本文链接 1. 前往ORACLE官网下载最新 ...
- WPF中设置了WindowStyle="None"后,窗口仍然有边框的解决方法
1. 设置了窗体的WindowStyle="None",窗口还是右边框,如下图: 2. 这是因为窗体默认是可以改变大小的,所以需要修改ResizeMode的值 ResizeMode ...
- redis数据类型(四)list类型
一.list类型 list是一个链表结构,可以理解为一个每个子元素都是 string 类型的双向链表. 主要功能是push.pop.获取一个范围的所有值等. 操作中key理解为链表的名字. 二.Lis ...
- 分布式一致性协议介绍(Paxos、Raft)
两阶段提交 Two-phase Commit(2PC):保证一个事务跨越多个节点时保持 ACID 特性: 两类节点:协调者(Coordinator)和参与者(Participants),协调者只有一 ...
- Mozilla新特性只支持https网站,再次推动SSL证书普及
Mozilla的官方博客2015.4.30正式宣布了淘汰HTTP的方案. 其中包括:设定一个日期,所有的新特性将只提供给HTTPS网站:HTTP网站将逐步被禁止访问浏览器功能,尤其是那些与用户安全和隐 ...
- Knockout.js Visible绑定
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...
- jQuery基础---常规选择器
内容摘要: 1.简单选择器 2.进阶选择器 3.高级选择器 发文不易,转载请注明出处! jQuery 最核心的组成部分就是:选择器引擎.它继承了 CSS 的语法,可以对 DOM 元素的标签名.属性名. ...
- django中的缓存
对于一个动态网站来说,用户的每次访问都意味着对服务器的一次开销,当该服务器的并发访问非常大时,对于一个动态网站来说,开销会非常的大.所以对于大中型web应用来说,减轻服务器的性能瓶颈就很有必要 对于d ...