Django 路由层(urlconf)
Django 的路由层(URLconf)
URL配置(conf)就像是Django所支撑的网站的目录;
本质就是:URL与调用该URL执行的视图函数的映射表;
通俗的讲:就是用户使用哪个url,URL(conf)就需要告诉服务器执行哪个程序代码.
一 路由配置的简单使用
path :不能使用正则 ,path('路径',views.方法)
re_path :可以使用正则 ,re_path(r'正则表达式路径',views.方法)
from django.urls import path,re_path from app01 import views #必须导入views urlpatterns = [
re_path(r'^articles/2003/$', views.special_case_2003), ]
二 路由配置使用注意事项
- 若要从URL中获取一个值,只需要在对应的URL处放置一对圆括号
re_path(r'^articles/([0-9]{4})/$', views.year_archive)
#传送给views时会携带小括号的数值,故需要相应的形参接受
- 不需要添加一个前导的反斜杠,因为每个URL 都有。
re_path(r'/articles/$', views.year_archive) #错误写法
- 每个正则表达式前面的'r' 是可选的但是建议加上.
三 路由配置与views传值过程解析
'''
url配置:
re_path(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), 对应url请求时候的传值过程 /articles/2005/03/ 请求将匹配列表中的第三个模式。
Django 将调用函数views.month_archive(request, '2005', '03')。 '''
四 有名分组
1 基本格式
path('index/(? P<year> \d{4})',views.year)
对应views中
def year(request,year):
return HttpResponse(year)
2 传值方式---关键字传参
/articles/2003/03/03/
请求将调用函数views.article_detail(request, year='', month='', day='')。
五 分发(include)
1、分发意义
ULR解耦合。把每一个应用的视图函数放入自己的文件中,全局的urls只需要分配该路径属于某一个应用的视图函数。这样解决如果有一个程序出了问题不会影响到其他的应用的执行。
urlpatterns = [
re_path(r'^admin/', admin.site.urls),
re_path(r'^app01/', include('app01.urls')),
] 之后app01中的urls,再对匹配成功的url进行分发
六 反向解析
1 使用场景
在模板中:使用url 模板标签。
{% url '别名' %}
在Python 代码中:使用from django.urls import reverse()函数
rev_url=reverse('别名')
2 html文件中的反向解析
项目.urls.py 设置别名 name='Index'
from django.contrib import admin
from django.urls import path,re_path from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/',views.index,name='Index'),
path('login/', views.login) ]
app01.views.py中 导入 inverse
from django.shortcuts import render,HttpResponse,redirect
from django.urls import reverse #导入方向解析函数
# Create your views here.
def index(request):
return render(request,'index.html')
def login(request):
print(request.method)
if request.method=='GET':
return render(request,'login.html')
else:
re_path=reverse('Index') #反向解析
return redirect(request,re_path)
3 html 文件中的反向解析
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="{% url 'Log' %}" method="post">
{% csrf_token %} 用户名 <input type="text" name="user"> 密码 <input type="text" name="pwd">
<input type="submit">
</form>
</body>
</html>
4 反向解析解析过程分析
根据别名,在urlpatterns中找到对应的路径并返回
五 名称空间(解决反向解析出现找不到正确url的问题)
命名空间(英语:Namespace)是表示标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。
由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回.
我们在开发项目时,会经常使用name属性反解出URL,当不小心在不同的app的urls中定义相同的name时,可能会导致URL反解错误,为了避免这种事情发生,引入了命名空间。
project的urls.py
urlpatterns = [
re_path(r'^admin/', admin.site.urls),
re_path(r'^app01/', include("app01.urls",namespace="app01")),
re_path(r'^app02/', include("app02.urls",namespace="app02")),
]
app01.urls
urlpatterns = [
re_path(r'^index/', index,name="index"),
]
app02.urls
urlpatterns = [
re_path(r'^index/', index,name="index"),
]
app01.views
from django.core.urlresolvers import reverse
def index(request):
return HttpResponse(reverse("app01:index"))
app02.views
from django.core.urlresolvers import reverse
def index(request):
return HttpResponse(reverse("app02:index"))
Django 路由层(urlconf)的更多相关文章
- 解析Django路由层URLconf
目录: 一 Django中路由的作用 二 路由的分组 三 路由分发 四 反向解析 五 名称空间 六 Django2.0版的path 一.Django中路由的作用 URL配置(URLconf ...
- Django2.0路由层-URLconf
目录 DJango2.0路由层-URLconf 概述 urlpatterns 实例 path转换器 自定义path转换器 使用正则表达式 命名组(有名分组) URLconf匹配请求URL中的哪些部分 ...
- 关于Django路由层简单笔记
Django—路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个U ...
- Django路由层与视图层
表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...
- Django路由层与视图层、pycharm虚拟环境
一. Django路由层 路由层即对应项目文件下的urls.py文件.实际上每个APP中也可以有自己的urls.py路由层.templates文件夹及static文件夹.Django支持这么做,也为实 ...
- 关于Django中路由层(URL-conf)
关于路由层 路由层其实就是项目中urls.py那个文件,那里面存放着url和视图函数的对应关系它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来 ...
- Django路由层
路由层简单配置 urlpatterns = [ url(r'^admin/$', admin.site.urls), url(r'^articles/2003/$', views.special_ca ...
- Django --- 路由层(urls)
目录 1.orm表关系如何建立 2.django请求生命周期流程图 3.urls.py路由层 4.路由匹配 5.无名分组 6.有名分组 7.反向解析 8.路由分发 9.名称空间 10.伪静态 11.虚 ...
- django 路由层 伪静态网页 虚拟环境 视图层
路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页 虚拟环境 视图层 JsonResponse FBV与CBV 文件上传 项目urls.py下面 from app01 import ...
随机推荐
- C#计算一段代码的运行时间
第一种方法利用System.DateTime.Now: static void SubTest() { DateTime beforDT = System.DateTime.Now; //耗时巨大的代 ...
- pdf生成库-libharu编译
相关文章:libharu 源码编译 VS2010 1.首先下载libharu源码,libharu依赖于libpng和libzib,如果编译过libpng和libzib的话,直接拿过来用即可.否则需要自 ...
- Android:谈一谈安卓应用中的Toast情节(基础)
前言 Toast,这个曾经也是现在正在迷倒万千软件开发者尤其是android开发者的小美女,向来不乏在各个明星应用中频繁登场.Toast是神马~听说是一种吐司面包,能吃吗?如果手机屏幕是巧克力做的,我 ...
- wsl中使用原生docker
之前介绍过windows中安装docker,但是它需要用到hyper-v.hyper-v与vm不兼容非常之不方便.不过发现windows有wsl(linux子系统)遂试验,结果非常nice功能一应俱全 ...
- 记录:C++类内存分布(虚继承与虚函数)
工具:VS2013 先说一下VS环境下查看类内存分布的方法: 先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存 ...
- JSON 与 JS 对象的区别与对比
定义: JSON是什么?JSON是JS的一种简单数据格式,JSON是JavaScript原生格式,它是一种严格的js对象的格式,JSON的属性名必须有双引号,如果值是字符串,也必须是双引号. 问题: ...
- 在win10系统开启linux子系统
1. 2.重启计算机 3.在winstore下载和安装 ubuntu 4.查看当前win10子系统的linux版本 lsb_release -a 5.设置root账号密码, 在终端输入命令 sudo ...
- 谈谈Mysql主从同步延迟分析及解决方案
一.MySQL的数据库主从复制原理 MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示: 分为四步走: 1. 主库对所有DDL和DML产生的日志写进binlog: 2. 主库生成一个 lo ...
- 单元测试与Mockito
1.什么是单元测试? 顾名思义单元测试就是对软件系统中最小的单元(函数.类)做测试,类似焊接电路板前对每个电容器(电子元器件)的测试.从软件测试分级来看,单元测试是最底层也是离程序员最近的一层,一般由 ...
- Java学习笔记之——TreeMap
TreeMap: 特点:存储时,按照键排序 底层使用一个红黑树,特殊的而二叉树 排序跟comparable,comparator有关系 如果需要在添加时进行排序,使用hashMap即可 构造方法: T ...