Django3_Url控制系统和View视图

一.URL控制系统
1.简单说明
URL配置的本质是通过URL与对应的View视图形成映射,我们在调用URL时会自动找到对应的view进行逻辑处理,及通过URL告诉Django调用那一段View代码.
2.格式
urlpatterns = [
url(‘正则表达式URL1’,views视图函数,[参数],[别名]),
url(‘正则表达式URL2’,views视图函数,[参数],[别名]),
]
参数说明:
?一个正则表达式字符串,Django会从上往下一次匹配url,匹配有值则停止往下查找;
?一个可调用的视图函数
?可选的要传给视图函数的默认参数(字典形式)
?一个可选的别名name参数,如果有了别名,在调用时可以直接用该别名,这样修改URL,其他使用别名的应用则不用修改
例如:

3.命名分组函数
命名分组函数分为:有命名分组函数和无命名分组函数,他们是通过url中的正则表达式(表达式中带小括号进行分组)是否指定名字来区分。正则表达式分组并指定了名字则为有命名分组函数,正则表达式分组但未指定了名字则为无命名分组函数。
3.1 不属于两者范畴

3.2 无命名分组函数


3.3 有命名分组函数


效果图:

4.别名
我们通过,url来映射url与view视图之间的关联,如果其他地方需要用到我们的url时,我们可以直接进行引用,例如在form表单中,点击提交之后可以使用action来跳转到另外一个url,此时我们可以直接在form的action中直接引用需要的url。但是如果直接引用,则有以下不合理的地方:
a.随着url中url地址的修改则需要修改所有到它的地方,可能会有遗漏的地方;
b.如果url地址比较长时,则所有引用的地方均需要进行重复编写,此时量比较大;
此时,我们可以直接使用别名的形式进行处理,如图url别名设置:

引用方式如图:

5.Url路由分发
在前面所有的例子中,我们只有一个app应用,如果一个项目有多个不同app引用时,我们把所有的url都放在urls.py中,不仅会显得十分混乱而且有时还会影响正常功能的使用(比如APP1中有一个url有问题,但是APP2中所有url正常,此时APP1将会影响APP2的正常使用)。此时,我们可以使用url路径分发机制来处理,如图:
项目的url(项目中统筹向下分发的url):

APP应用中的url设置:


6.

二.View视图函数
View主要是用来处理逻辑的模块,web中通过接受请求并处理请求并将处理的结果返回给请求对象。其中主要是通过http协议来完成请求的。
HTTP请求中产生两个核心对象:
http请求:HttpRequest对象;
http响应:HttpResponse对象;
http模块的位置是在django.http中。
1.HttpRequest
HttpRequest对象是由django框架内部自己自动创建的,我们在定义每个方法时必须要带上它,名字可自定义,但建议使用request。也就是说,django的view模块中所有定义的函数,必须带上一个request的参数,且request是django在接收到请求后自己创建的对象。HttpRequest对象的属性和方法实际上就是这个request的属性和方法。
HttpRequest对象的主要方法:
1.1 Request.method: http请求的方法类别,分为GET和POST两种;
1.2 request.GET.get(‘key‘):http通过GET请求传到HttpRequest的字典对象,再用get方法通过关键字获取对应的value;
1.3 request.POST.get(‘key‘):http通过POST请求传到HttpRequest的字典对象,再用get方法通过关键字获取对应的value;
1.4 Request.path:获取url的链接,返回值不带参数;
1.5 request.get_full_path():获取url的链接,若是通过get传输,则此处的值返回的是带参数值的url;
如图:

1.6
2.HttpResponse对象
对于HttpResponse对象来说,它和HttpRequest对象不同,前者必须要自己创建,而后者是django自己自动创建的。每个view请求的处理方法必须返回一个HttpResponse。
HttpResponse对象的常用方法:
2.1 HttpResponse():将内容返回到页面上,此处不需要加request参数,如图:

2.2 render():页面渲染(将html经过django后台处理后将页面效果渲染到浏览器中),推荐使用。
格式: render(request,’前端.html’)注:request参数必带;
例如:

注:其实,render()最终返回的依然是一个HttpResponse对象,源代码如下图所示:

2.3 render_to_response():也是页面渲染(将html经过django后台处理后将页面效果渲染到浏览器中)
格式:render_to_response(’前端.html’),与render()作用一样,但render_to_response()不需要带request,且render_to_response()在使用工程中可能出现问题。推荐使用render()方法。
例如:

注:其实,render()最终返回的依然是一个HttpResponse对象,源代码如下图所示:

3.View中局部变量加载到template(html文件)中的两种方式
a.通过key:value键值对字典的形式通过key获取到对应的value并加载到对应的HTML文件中,如图所示:

对应的HTML引用view中变量的方式如图所示:

此方法如果HTML中有N多个需要获取view中的局部变量时,则写的key/value键值对将添加很多,此时会比较麻烦,但是在实际使用过程中,我们在view中定义的局部变量并不会很多,推荐使用该种方式。
b.通过locals()函数将view中的所有局部变量都加载到HTML中,如图所示:

对应的HTML文件加载view中的参数方式如图所示:

此时,view中使用什么变量名,HTML中也就使用相同的变量名,此时不再使用key获取对应的value值的方式。
4.redirect()
redirect()是跳转到某一个指定的url,参数为指定要跳转的url;如图所示:

内部原理:使用redirect(url)进行跳转时,先去对应的url.py中匹配对应的redirect中指定的url,匹配成功后再去查找url对应的view函数并执行该函数。
注意:redirect()与render()的区别:
A.redirect()中必须跟的是url路径,而render()中必须是需要渲染的html文件名称;
B.redirect()跳转之后,url会变成redirect(url)指定跳转的url,而使用render()则url不会发生变化。
如图:


三.相关代码地址
https://github.com/DoneZj/django3.git

原文地址:http://blog.51cto.com/10836356/2314766

时间: 2024-07-30 06:10:48

Django3_Url控制系统和View视图的相关文章

SIS系统和DCS系统的使用与组态上的本质区别分析,更深刻的知道DCS为了控制,SIS为了保护! sis系统和DCS系统有什么区别?

DCS --distribution control system 分散式控制系统,工厂控制级系统,常规数据采集,设备控制都 由此系统完成. SIS--safty instruments system 安全仪表系统,联锁系统的一种,一般做工厂过程设备的安全保护控制,有时也包含机组安全保护控制.sis系统和DCS系统使用上有什么区别? sis系统使用实时平台支持各功能模块在不同的服务器上分布运行,使各服务器的负载均衡,使用不同的网卡分别连接控制系统与SIS系统,保证网络隔离.控制系统的所有数据只能

DNS主从服务,子域授权,view视图,日志系统,压力测试rsync配置

DNS主从服务,子域授权,view视图,日志系统,压力测试 DNS性能测试工具queryperfDNS查询过程: DNS主从建立: 环境: 主服务器:10.140.165.93 从服务器:10.140.165.169 关闭防火墙,关闭selinux. 主服务器建立: [[email protected] ~]# yum -y install bind-util bind #安装bind服务 [[email protected] ~]# vim /etc/named.conf #编辑主配置文件 o

自定义View视图

自定义View视图文件查找逻辑 之前MVC5和之前的版本中,我们要想对View文件的路径进行控制的话,则必须要对IViewEngine接口的FindPartialView或FindView方法进行重写,所有的视图引擎都继承于该IViewEngine接口,比如默认的RazorViewEngine.但新版本MVC6中,对视图文件的路径方式却不太一样了,目前有两种方式,一种是通过RazorViewEngine,另外一种是通过新特性IViewLocationExpander接口. 通过RazorView

ERP系统和MES系统的区别

公司说最近要上一套erp系统,说让我比较一下,erp系统哪个好,还有mes系统,我们适合上哪个系统,其实我还真的不太懂,刚接触erp跟mes的时候,对于两者的概念总是傻傻分不清楚,总是觉得既然都是为企业的信息化做贡献,那区别又是在哪儿呢? 然后经过一系列的搜索,现在终于有了一些概念了. 好吧,细细说来,ERP系统以供应链管理为核心,以销售部门和采购部门为信息源头,以设备.人力等其它系统为基础,使信息流在ERP内部得到有效的传递和集成. 产线上的数据采集,产品在生产流程中的数据跟踪等这部分属于ME

Linux基础知识--Linux的文件系统和bash的基础特性

Linux基础知识--linux的文件系统和bash的基础特性 一.Linux文件系统: Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件.目录.软连接及文件保护信息等都存储在其中 linux文件系统遵循FHS(Filesystem Hierarchy Standard,文件系统目录标准),多数Linux版本采用这种文件组织形式.FHS采用了树行组织文件. FHS定义了两层规范,第一层是,/目录下面的各个目录应该要

一种基于uCos-II操作系统和lwIP协议栈的IEEE-1588主站以及基于该主站的报文处理方法

本发明公开了一种基于uCos‐II操作系统和lwIP协议栈的IEEE‐1588主站以及应用于电力系统的支持IEEE‐1588协议的主时钟(IEEE‐1588主站)的实现方法.该方法是在一个低成本的硬件平台上,借助uCos‐II操作系统和TCP/IP的协议栈,对以太网数据进行了分类处理,实现了在同一个以太网端口提供基于二层和三层报文交换的IEEE‐1588的主站功能.另外,通过使用不同的操作系统进程来处理E2E和P2P对时,实现了两种对时模式在同一端口上的共存. 技术领域 [0001] 本发明属于

解读ASP.NET 5 & MVC6系列(16):自定义View视图文件查找逻辑

原文:解读ASP.NET 5 & MVC6系列(16):自定义View视图文件查找逻辑 之前MVC5和之前的版本中,我们要想对View文件的路径进行控制的话,则必须要对IViewEngine接口的FindPartialView或FindView方法进行重写,所有的视图引擎都继承于该IViewEngine接口,比如默认的RazorViewEngine.但新版本MVC6中,对视图文件的路径方式却不太一样了,目前有两种方式,一种是通过RazorViewEngine,另外一种是通过新特性IViewLoc

{{view 视图层}}微信小程序

微信小程序 view 视图层//自学 1.数据绑定 数据绑定 WXML中的动态数据均来自对应Page的data. 简单绑定 数据绑定使用"Mustache"语法(双大括号)将变量包起来,可以作用于: 内容 <view> {{ message }} </view> Page({ data: { message: 'Hello MINA!' } }) 组件属性(需要在双引号之内) <view id="item-{{id}}"> <

小贝_mysql view视图学习

view视图 简要: 1.视图定义 2.创建视图 3.视图与表的关系 4.视图种类 一.视图定义 视图起因: 查询每个栏目最贵的商品=> selectgoods_id,goods_name,shop_price from goods order by cat_id asc,shop_price desc; 查询结果,当成一张表看 如果某个查询结果出现的非常频繁,也就是说,拿这个结果进行子查询出现的非常频繁. createtable g2 like goods;insert into g2 sel