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

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怎么知道静态文件放哪
(圆括号是元组,句尾需要逗号)
