当前位置: 首页 > news >正文

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,其他使用别名的应用则不用修改
例如:
Django3_Url控制系统和View视图
Django3_Url控制系统和View视图

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

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

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

APP应用中的url设置:
Django3_Url控制系统和View视图
Django3_Url控制系统和View视图
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;
如图:
Django3_Url控制系统和View视图
1.6
2.HttpResponse对象
对于HttpResponse对象来说,它和HttpRequest对象不同,前者必须要自己创建,而后者是django自己自动创建的。每个view请求的处理方法必须返回一个HttpResponse。
HttpResponse对象的常用方法:
2.1 HttpResponse():将内容返回到页面上,此处不需要加request参数,如图:
Django3_Url控制系统和View视图
2.2 render():页面渲染(将html经过django后台处理后将页面效果渲染到浏览器中),推荐使用。
格式: render(request,’前端.html’)注:request参数必带;
例如:
Django3_Url控制系统和View视图
注:其实,render()最终返回的依然是一个HttpResponse对象,源代码如下图所示:
Django3_Url控制系统和View视图
2.3 render_to_response():也是页面渲染(将html经过django后台处理后将页面效果渲染到浏览器中)
格式:render_to_response(’前端.html’),与render()作用一样,但render_to_response()不需要带request,且render_to_response()在使用工程中可能出现问题。推荐使用render()方法。
例如:
Django3_Url控制系统和View视图
注:其实,render()最终返回的依然是一个HttpResponse对象,源代码如下图所示:
Django3_Url控制系统和View视图
3.View中局部变量加载到template(html文件)中的两种方式
a.通过key:value键值对字典的形式通过key获取到对应的value并加载到对应的HTML文件中,如图所示:
Django3_Url控制系统和View视图
对应的HTML引用view中变量的方式如图所示:
Django3_Url控制系统和View视图
此方法如果HTML中有N多个需要获取view中的局部变量时,则写的key/value键值对将添加很多,此时会比较麻烦,但是在实际使用过程中,我们在view中定义的局部变量并不会很多,推荐使用该种方式。
b.通过locals()函数将view中的所有局部变量都加载到HTML中,如图所示:
Django3_Url控制系统和View视图
对应的HTML文件加载view中的参数方式如图所示:
Django3_Url控制系统和View视图
此时,view中使用什么变量名,HTML中也就使用相同的变量名,此时不再使用key获取对应的value值的方式。
4.redirect()
redirect()是跳转到某一个指定的url,参数为指定要跳转的url;如图所示:
Django3_Url控制系统和View视图
内部原理:使用redirect(url)进行跳转时,先去对应的url.py中匹配对应的redirect中指定的url,匹配成功后再去查找url对应的view函数并执行该函数。
注意:redirect()与render()的区别:
A.redirect()中必须跟的是url路径,而render()中必须是需要渲染的html文件名称;
B.redirect()跳转之后,url会变成redirect(url)指定跳转的url,而使用render()则url不会发生变化。
如图:
Django3_Url控制系统和View视图

Django3_Url控制系统和View视图
三.相关代码地址
https://github.com/DoneZj/django3.git

欢迎关注笔者个人公众号:
Django3_Url控制系统和View视图

转载于:https://blog.51cto.com/10836356/2314766

相关文章:

  • FastReport在线报表设计器工作原理
  • JavaScript是怎样AOP实现?
  • 常用公共DNS服务器地址
  • BZOJ 2733: [HNOI2012]永无乡 启发式合并treap
  • TCP/IP中的四元组、五元组、七元组
  • Win8/Win10下程序经常无响应的解决办法
  • 使用zt-exec库定时清理linux休眠进程
  • 像素密度和分辨率
  • 链表的销毁与清空(转)
  • NChome如何创建单据跟主子表还有扩展开发要怎么弄?
  • 数据库 外存储器读写数据物理过程
  • android四大组件之Service 简单音乐播放器
  • 已安装pymysql 但Pycharm 中import pymysql出错的解决方案
  • 关于字符串的倒置
  • 实时计算Flink——独享模式——Batch功能介绍
  • JavaScript 如何正确处理 Unicode 编码问题!
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 30天自制操作系统-2
  • Asm.js的简单介绍
  • go append函数以及写入
  • go语言学习初探(一)
  • idea + plantuml 画流程图
  • Unix命令
  • Yii源码解读-服务定位器(Service Locator)
  • 笨办法学C 练习34:动态数组
  • 后端_MYSQL
  • 基于axios的vue插件,让http请求更简单
  • 利用jquery编写加法运算验证码
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 双管齐下,VMware的容器新战略
  • gunicorn工作原理
  • 组复制官方翻译九、Group Replication Technical Details
  • #HarmonyOS:Web组件的使用
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (C++17) std算法之执行策略 execution
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (阿里云万网)-域名注册购买实名流程
  • (第一天)包装对象、作用域、创建对象
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (论文阅读30/100)Convolutional Pose Machines
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (算法设计与分析)第一章算法概述-习题
  • (太强大了) - Linux 性能监控、测试、优化工具
  • .NET 解决重复提交问题
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • [] 与 [[]], -gt 与 > 的比较
  • [22]. 括号生成
  • [Android Studio] 开发Java 程序
  • [C#]OpenCvSharp结合yolov8-face实现L2CS-Net眼睛注视方向估计或者人脸朝向估计
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [cb]UIGrid+UIStretch的自适应
  • [CF]Codeforces Round #551 (Div. 2)
  • [CQOI 2011]动态逆序对