欢迎光临散文网 会员登陆 & 注册

最新版Django全套视频(django框架快速上手)_Python全栈_累计播

2023-04-15 23:53 作者:DINGY_IDLE  | 我要投稿

2.2 - GET请求和POST请求

定义

要区分GET和POST处理

视图函数整体样例

公司的视图函数代码基本结构

GET处理

提交表单数据更倾向于POST,更加隐秘

URL里【?】后面的就是查询字符串,所以不能传递敏感数据,数据都在地址栏里

通常就传一些辅助类信息,比如页码

GET方法示例

类型是字典,取[key]的value

【views.py】

【urls.py】

没有给a赋值的情况

MultiValueDictKeyError(错误类型)

在Traceback里找到自己写的代码,检查变量

结合KeyError可知没有没有查到key的值

用温和的get就不会报错,因为给了默认值

request.GET.getlist(key)

把request.GET整体打印出来,是一个字典,值是数组

把a打印出来,只打印数组最后一项

getlist()打印数组

输出结果

用处:多选,多个值

思考:计算器功能既能用正则表达去取,又能拿GET查询字符串做。看自己选择。


post处理

使用场景

  • action是给哪个路由发请求(发给谁)
  • 一个组件框要给它起名,传过去时username就是它的key,数据就是value

服务器端接收参数

和get完全一样

【views.py】

写一个全局变量存表单框,相当于写一个html

回车后发送get请求返回一个POST_FORM,然后用户发送post请求服务器获取name

提交后提示403:

防范csrf攻击,还学不到,先关上

F12【网络】->【消息头】看请求方法

【参数】看请求体里的表单数据

小结

  • get:少而美的数据
  • post:敏感的数据、大量的数据(密码、文章)


2.03-Django的设计模式及模板层

MTV是MVC的升级版

传统的MVC

M层:基于一个规则去操作数据库,原来的传统mysql操作语句封装成一套自己的语法,专门用于开发,比直接写sql语句更简化

V层:向用户展示什么数据,展示怎样的数据

C层:核心大脑,统筹全局请求传输

Django的MTV模式

在V层处理、规整好数据,一股脑丢给T层显示

原来MVC中的C层在MTV里其实就是主路由,只负责url分发,所以可以说是C-MTV模式

前后端不分离,高耦合

模板

把视图里的python变量,通过字典的形式传递到html里

模板配置

只要配置DIRS就可以了,其他默认

DIRS的值是数组,可以写多个,得到templates的绝对路径

BASE_DIR经常充当的角色是拼接一个路径

创建templates

在mysite目录下创建templates文件夹,与manage.py同级

【settings.py】

模板的加载方式

方案1

【views.py】

【test_html.html】

【urls.py】

方案2(后期出现,比方案1好)

独立于loader的render

字典数据可有可无

视图层与模板层之间的交互

视图函数:Python变量封装成字典{"":"","":""}

模板层:{{变量名}}调用字典

【views.py】

【html】


2.04-模板层-变量和标签

模板层-变量

能传到模板中的数据类型

  • 调一个索引的元素.index,和python不一样,在python里是变量[index]
  • .key是传入字典时,字典里也定义了字典
  • 可以调用某个对象里的方法,后面不需要括号
  • 和Vue的template差不多,以及jsp

【html】

【views.py】

运行结果

模板层-标签

if判断、for循环等

if 标签

一定要记得结束标签

if里括号是无效的,看官方文档

【views.py】

【html】

练习-计算器页面

【html】

提交的时候op根据value去选择

自动格式化代码:CTRL + ALT + L

删掉默认的value

【views.py】

要显示用户提交之前填的数,就要原封不动地传回去。locals()把当前函数里的局部变量直接封装成字典

【html】

selected默认显示选项,但是需要去做判断,得到传回来的op值

for 标签

empty:数据是空值时执行内容,省去自己判断空

内置变量forloop

【html】

forloop.counter

forloop.first

【views.py】

返回一个数组


2.05-模板层-过滤器和继承

模板层过滤器

对视图传过来的变量的值进行修整和处理,不需要视图做

常用过滤器

  • add就是在value上做加法运算,传的参数是字符串类型,要加引号
  • safe就是不对字符串转义,比如传入js代码,不直接显示为纯字符串,而是当成js可执行代码

html转义后的代码,把尖括号等转义

模板层-继承

如果需要修改同样的 头尾部分,继承可以简化,只需要修改base.html

中间部分允许被修改,就在中间加block标签

父模板:base.html

【views.py】

【base.html】

【sport.html】

重写规则

视图传的变量继承不了,比如子模板拿不到父模板的变量

只是纯模板的技术,sport进的是sport的views视图函数,整个过程并没有走base的views,拿不到base的变量


2.06-url反向解析

代码中url出现的位置,模板和视图

url书写规范,绝对地址和相对地址

第一种相对地址(高频),取出协议、ip、端口

第二种相对地址,取出最后一个/之前的内容

【views.py】

【html】

【urls.py】

第三个链接访问的绝对地址是:http://127.0.0.1:8000/test/test_url_result

路由里没配置,所以404

url反向解析

用name去查找

模板通过url标签传参,填充到path转换器上

传参后url地址收到参数

无论如何修改url地址,只要没有修改path里的name,模板页面都能取到对应的url

没有用{%url%}标签定义的地址(绝对地址的写法),但凡路由变了,就会受影响

在视图里使用

浏览器如何知道302跳转到哪里去?

通过响应头标记,Location响应头


3.01-静态文件

什么是静态文件

在服务器加载

用F12查看静态文件,发送了一系列请求

过滤器选择不同类型的请求

静态文件配置

一旦被浏览器读到标签,就会对src地址发送http请求

django怎么知道静态文件放哪

(圆括号是元组,句尾需要逗号)









最新版Django全套视频(django框架快速上手)_Python全栈_累计播的评论 (共 条)

分享到微博请遵守国家法律