Django第二天学习记录

news2025/2/21 23:25:29

1.对于路由配置的正则化补充(re_path的正则匹配)

对于第一天学习的path转换器过于暴力,对于需要匹配的内容不能很精准的进行转换。为了实现精准的字符串匹配规则,因此引入了re_path(reg,view,name=xxx)进行路由规则的精确匹配。
正则表达式为命名分组模式(?Ppattern);匹配提取参数后用关键字传参的方式传递给视图函数。

样例:
#可匹配 http://127.0.0.1:8000/20/mul/40
#不可匹配 http://127.0.0.1:8000/200/mul/400

Urlpatterns = [
	Path(‘admin/’,admin.site.urls),
	re_path(r‘^(?P<x>\d{1,2})/(?P<op>\w+)/(?P(y)\d{1,2})$’,views.cal_view)
] 

例如需要匹配的路径为/birthday/年/月/日或 /birthday/日/月/年

则正则表达式的re_path编写内容为:

re_path(r'^birthday/(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})$', views.calc_birthday),
re_path(r'^birthday/(?P<day>\d{1,2})/(?P<month>\d{1,2})/(?P<year>\d{4})$', views.calc_birthday),

视图函数的内容为:

def calc_birthday(request,year,month,day):
    html = "生日为%s年%s月%s日" % (year, month, day)
    return HttpResponse(html)

2.请求和响应

请求是指客户端通过http协议向服务器发起的请求。
而应答就是在views.py中定义的视图函数的HttpResponse,也就是服务器对客户端返回的响应response。

在HTTP请求中,常用的有三种方法:

1.GET请求。请求指定的页面,并返回实体主体。
2.HEAD请求。类似与get请求,但是HEAD请求主要获得该页面支持的请求头类型。
3.POST请求。向指定的资源提交数据并进行请求处理。
4.PUT请求。用于传送指定的文档到服务器中。
5.DELETE请求。用于请求删除服务器的指定页面内容。
6.CONNECT请求。HTTP/1.1协议中预留的能够将连接改为管道方式的代理服务器。
7.OPTIONS,允许客户端查看服务器的性能。
8.TRACE。回显服务器收到的请求,用于测试和诊断。

请求在django中就是视图函数的第一个参数,即HttpRequest对象。
Django接收到HTTP协议的请求后,会根据请求数据报文创建HttpRequest对象。
HttpRequest对象通过属性描述请求的所有相关信息。

因此,在视图函数中,函数的第一个参数request其实就包含了客户端请求的各类的信息。那么就可以调出请求中的相关信息。
因此,对于GET请求和POST请求中的处理主要就是对requests参数的处理。从客户端的请求中获取相关的信息。

Request参数对象所拥有的一些属性。

1.path_info,URL字符串。
2.Method,字符串,表示HTTP的请求方法。
3.GET,QueryDict查询的字典的对象,包含get请求方式获得的所有数据。
4.POST,QueryDict查询的字典的对象,包含post请求方式获得的所有数据。
5.FILES,是一个类似于字典的对象,包含了所有上传的文件的信息。
6.COOKIES
7.session
8.META类似于PHP的$_SERVER.

方法:
get_full_path()获取完整路径

3.GET请求和POST请求

由于在request中get和post都是通过GET和POST属性进行保存的,那么通过输出request中的GET和POST属性能够发现,输出的GET和POST信息都是字典信息。如下图所示:
在这里插入图片描述
那么在这种情况下,我们能够发现,如果需要对用户的GET和POST请求进行分析,这是一个QueryDict的字典格式的数据,和正常的字典数据类型还不太相同。
因此,对于QueryDict数据格式进行分析,可以知道可以通过dict()方法对QueryDict数据格式进行转换,将其转换为dict格式的数据类型。
当然,QueryDict数据类型兼容一部分字典的操作,因此也可以直接通过字典的方法去访问QueryDict的数据类型。
在这里插入图片描述
在这里插入图片描述那么,获取key和value的时候只需要对字典类型的数据进行处理即可。
如果传递的参数内容是一个列表,那么需要对GET属性使用getlist(‘参数名’)来获取参数列表。

对于GET属性,存在get方法,get方法为get(key,value)。意思是:如果GET中存在KEY,则使用通过GET请求获得的KEY的值,否则KEY的默认值被置为value,并返回value信息。
如果在GET请求中出现了同名参数,那么该参数会变成一个字典。但是如果仅仅通过get参数去获取,那么只能获得最后一个参数。同样的,通过dict方法进行获取的话,也只能获得最后一个参数。这也算是QueryDict和Dict的一个区别。
因此,在实际使用过程中,如果实际的值有多个,例如html存在复选框的情况,一般使用getlist方法来获取多个值的数据。

而对于POSt请求,一般是提交大量数据或者是提交隐私数据的时候,一般使用POST请求。

在这里插入图片描述如果在本地使用POST进行测试发现出现CSRF攻击检测问题导致的403访问被拒绝,那么新手可以尝试通过暂时关闭csrf校验来跳过这个问题。
在settings.py文件中,通过找django.middleware.csrf.CsrfViewMiddleware的内容,并注释该行,就能暂时关闭csrf校验。
在后期,可以分安全策略来对csrf校验的具体内容再做具体分析。

对于HttpResponse函数的具体返回内容:
HttpResponse(content=响应体,content_type=响应体数据类型,status=状态码)

如果在返回时不对status进行修正,那么默认返回code将会为200

常用的Content-type类型:

1.text/html
2.text/plain
3.text/css
4.text/javascript
5.application/json
6.applicaion/xml

关于HttpResponse的子类:
在这里插入图片描述因此,可以考虑通过默认的子类来返回特定的内容。
在这里插入图片描述
例如直接使用HttpResponseRedirect方法直接强制跳转到百度。

关于GET和POST请求而言,无论是何种请求方式,全部通过视图函数进行接收。但是需要通过判断request.method方法优先区分具体的请求动作。

例如:

If requst.method == 'GET':
	处理get请求的数据
If request.method == 'POST':
	处理post请求的业务逻辑	

4.Django的设计模式和模板层

设计模式:

1.MVC,主要用于降低模块耦合度
M 模型层,主要用于对数据库层的封装
V 视图层,用于向用户展示结果
C 控制器,用于处理请求,获取数据并返回结果

2.MTV模式(Django专用)
M 模型层,负责和数据库的交互
T 模板层,负责呈现内容到浏览器
V 视图层,核心层,也就是负责接受请求,获取数据和结果。类似于MVC的C层,但是实际上C层在主路由文件中,利用路由模式定义的转发规则,来使用控制器来转发请求到视图层。
但是其实我本人觉得,这种方案和MVC并没有什么区别。

1.模板本身就是HTML。模板可以根据字典数据动态变化,生成不同的html网页。
2.模板本身根据视图中传递的字典数据动态生成html页面。

模板配置

1.创建模板文件夹,项目名下创建templates文件夹。
2.在settings.py中配置TEMPLATES配置项。
配置项一:BACKEND,指定模板的引擎
配置项二:DIRS,模板的搜索目录
配置项三:APP_DIRS,是否要在应用中的templates文件夹中的搜索文件
配置项四:OPTIONS,有关模板的选项。
通过配置settings.py文件下的templates文件夹的DIRS,如下图所示:
在这里插入图片描述例如在templates文件夹中增加html文件内容:
在这里插入图片描述
通过增加该文件内容到post_data文件后,在views.py文件中,从django.template中引入loader方法。

from django.template import loader

随后从post_data文件中读取该文件并通过HttpResponse文件返回给用户。

		t = loader.get_template("post_data")
		html = t.render()
		Return HttpResponse(html)

即可成功从模板文件中加载最终页面。
在这里插入图片描述
方法2:直接载入render方法。
注意,需要载入shortcut包。

From django.shortcut import render

在视图层采用return render(request,’模板文件名’,’字典数据’)即可返回网页模板内容。

如果需要和模板层进行数据层面上的交互,那么可以尝试在页面中通过{{变量名}}进行对变量的定义,然后在视图层中对模板层的数据进行动态更新。
例如,在模板层中,可以尝试通过如下方式编写代码:
在这里插入图片描述
因此,在视图层中,可以通过如下方式进行数据的绑定。
在这里插入图片描述
这种方式能够很好的实现模板层和视图层的数据交互,让数据的交互更加的便捷。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/87449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于云计算的 7 大误区

一直以来&#xff0c;有几个关于云计算的误区四处传播&#xff0c;散布恐惧和不必要的不信任。在使用新技术之前研究新技术并检查事实是很好的。让我们来看看关于云计算的 7 大误区&#xff0c;看看哪些是真的&#xff0c;哪些不是。 1.云迁移可能很麻烦 云迁移包括许多过程&am…

KMP算法讲解与实现

0、概述 KMP是用于字符串查找/匹配的算法&#xff1b; KMP算法的时间复杂度&#xff1a;O(n)O(n)O(n)&#xff1b; KMP算法的核心&#xff1a; 1&#xff09;如何理解 next 数组2&#xff09;如何利用 next 数组加速匹配过程&#xff0c;优化时的两个实质 KMP算法的实现 1…

推荐|资深架构师 10 年 10 条干货职场心得

出道这么些年&#xff0c;跳过好多公司&#xff0c;除了国企其他的基本上都去过&#xff0c;甲方、乙方、外包、外企、互联网公司、创业公司…总结下来有这么些体会&#xff0c;希望能对你和大家有些参考价值。1. 保持学习可能离开了学校之后&#xff0c;所有的学习几乎都出于工…

b站黑马的Vue快速入门案例代码——图片切换(类似手动播放的轮播图)

目录 目标效果&#xff1a; 重点原理&#xff1a; 1.用数组储存图片的数据 2.v-bind指令可以设置元素属性 e.g.src 语法 v-bind:属性名表达式 简写【实际开发常用】 :属性名表达式 3.v-show和v-if都可以切换元素的显示/隐藏状态 (1)频繁切换显示/隐藏的dom元素用 v…

Opencv项目实战:17 贪吃蛇游戏

目录 0、项目介绍 1、效果展示 2、项目搭建 3、项目代码展示与讲解 4、项目资源 5、项目总结 0、项目介绍 这次是一个有意思的计算机视觉游戏——贪吃蛇&#xff0c;我们以食指为蛇头&#xff0c;不断的移动我们的手指&#xff0c;当吃到甜甜圈的时候&#xff0c;蛇身增…

浅谈字节码增强技术系列2-Asm与Cglib

作者&#xff1a;董子龙 前言 记得那是2022年秋天的第一场雨&#xff0c;比2021年来的稍晚一些&#xff0c;在那个秋雨朦胧的下午&#xff0c;正在工位上奋笔疾书的我突然听到了前面波哥对着手机听筒说出来的"温柔"的话语&#xff1a;说说你了解的spring-aop。话音…

基于Vision Transformers的文档理解简介

文档理解是从pdf、图像和Word文档中提取关键信息的技术。这篇文章的目标是提供一个文档理解模型的概述。 文档理解算法使用编码器-解码器结构分析文档内容&#xff0c;该管道结合了计算机视觉(CV)和自然语言处理(NLP)方法。管道的CV部分将文档作为输入图像进行分析&#xff0c…

对数据库索引的理解以及索引在MySQL中的数据结构

引言 索引在本质上相当于书的目录&#xff0c;通过目录就可以快速的找到某个章节对应的位置。索引的效果&#xff0c;就是加快了查找的速度。日常进行数据库的操作&#xff0c;一般地都是进行增删查改&#xff0c;而在很多场景中&#xff0c;进行查找的概率要比增删改大很多。…

搭建Flutter Web开发调试环境

Setting up the Framework/Engine development environment背景搭建 framework 开发环境修改调试 framework 源码运行 framework 测试用例同步更新 framework 源码搭建 engine 开发环境准备 depot_tools部署 engine 源码编译 engine 源码修改调试 engine 源码指定 --local-engi…

​极氪汽车被曝拟美股上市:最高募资10亿 李书福接连收获IPO

雷递网 雷建平 12月13日极氪汽车日前被曝出已“秘密递交申请”&#xff0c;准备在美股上市&#xff0c;此次拟募资10亿美元&#xff0c;估值可能高达100亿美元。有分析认为&#xff0c;极氪汽车秘密递交招股书&#xff0c;是为尽可能向其他竞争对手隐藏招股书细节&#xff0c;以…

十二、对象继承深入、call_apply、※圣杯模式、※构造函数和闭包、※企业模块化

十二、对象继承深入、call_apply、※圣杯模式、※构造函数和闭包、※企业模块化 对象继承深入 原型链继承 原型链定义 ​ 对象沿着__proto__在原型上寻找属性形成一种链条式的继承关系&#xff0c;这种继承关系就叫做原型链。 例如&#xff1a; Professor.prototype {na…

Linux(二)vim编辑器,gcc,库

vim 简介 vi是“visual interface”的简称。 类似于Windows下的记事本。 vim可以视为vi的高级版本 按下vimtutor进入帮助文档&#xff0c;以下内容在其中都有 vim的三种模式 Vi有三种基本工作模式&#xff1a;命令模式、文本输入模式、末行模式 基本操作 命令模式下的操作…

迷宫--dfs解法以及迷宫问题要不要回溯

文章目录题意题解思路&#xff1a;问题&#xff1a; 迷宫问题dfs要不要回溯&#xff1f;题意 一天Extense在森林里探险的时候不小心走入了一个迷宫&#xff0c;迷宫可以看成是由 n∗n 的格点组成&#xff0c;每个格点只有2种状态&#xff0c;.和#&#xff0c;前者表示可以通行…

装载问题 ——分支限界法(Java)

装载问题 ——分支限界法&#xff08;Java&#xff09; 文章目录装载问题 ——分支限界法&#xff08;Java&#xff09;1、 问题描述2、算法设计3、算法的改进4、程序代码5、参考资料1、 问题描述 有一批共n个集装箱要装上2艘载重量分别为C1和C2的轮船&#xff0c;其中集 装箱…

数图互通高校房产管理——教职工住宅方案

数图互通房产管理系统在这方面做得比较全面&#xff1b; 1、住房管理 1.1 住房档案 住房模块的管理主要是针对学校的承租住宅和已售住宅的管理&#xff0c;用于登记已售住宅的产权人信息&#xff0c;记录承租住宅的租赁起止日期、月租金等基本信息。 支持住房的坐落信息、楼栋…

Cas:146368-11-8(水溶)|Sulfo CY5-羧酸|Cyanine5 Carboxylic Acidic acid

Cas:146368-11-8(水溶)|Sulfo CY5-羧酸|Cyanine5 Carboxylic Acidic acid Sulfo CY5-羧酸这种分子可以被认为是非活性染料&#xff0c;用于控制样品和仪器校准。为了与胺和蛋白质标记偶联&#xff0c; 中文名&#xff1a;Sulfo CY5-羧酸 英文名&#xff1a;Cyanine5 Carboxy…

rate-limit 一款 java 开源渐进式分布式限流框架使用介绍

项目简介 rate-limit 是一个为 java 设计的渐进式限流工具。 目的是为了深入学习和使用限流&#xff0c;后续将会持续迭代。 特性 渐进式实现 支持独立于 spring 使用 支持整合 spring 支持整合 spring-boot 内置多种限流策略 快速开始 需求 jdk 1.7 maven 3.x mav…

ARM S5PV210 时钟系统与时钟体系框图

前言 This chapter describes the clock management unit (CMU) supported by S5PV210. The system controller (SYSCON) manages CMU and power management unit (PMU) in S5PV210. 本章介绍 S5PV210 支持的时钟管理单元&#xff08;CMU&#xff09;。系统控制器&#xff08…

【软考】系统集成项目管理工程师(十一)项目人力资源管理

一、项目人力资源管理概述二、激励理论1. 马斯洛需求层次理论2. 赫茨伯格的双因素理论3. X 理论/ Y 理论4. 期望理论三、人力资源管理子过程1. 规划人力资源管理2. 组建项目团队3. 建设项目团队4. 管理项目团队一、项目人力资源管理概述 在了解人力资源管理之前,我们先来认识…

从局部到全局:语义相似度的测地线距离

©PaperWeekly 原创 作者 | 苏剑林单位 | 追一科技研究方向 | NLP、神经网络前段时间在最近的一篇论文《Unsupervised Opinion Summarization Using Approximate Geodesics》[1] 中学到了一个新的概念&#xff0c;叫做“测地线距离&#xff08;Geodesic Distance&#xff…