django_day06
django_day06
内容回顾
- 事务
try:
with transaction.atomic():
#事务
#一系列的操作
pass
except Exception as e:
print(e)
cookie
是什么?保存在浏览器本地的一组组键值对
为什么要使用cookie?
- Http协议时无状态协议 每次请求之间都是相互独立的 没有办法保存状态 使用cookie保存状态
- 特征:
- 由服务器让浏览器设置的
- 浏览器把键值对保存在本地 本权不保存
- 下次访问时会自动携带对应的cookie
django中操作cookie
#设置cookie 响应头 set=cookie
ret = HttpResponse('xx')
ret.set_cookie(key,value,max_age=5,path='/')
ret.set_signed_cookie(key,value,max_age=5,path='/',salt='xxx')
#获取cookie
request.COOKIES {} [key] .get(key)
request.get_signed_cookie(key,salt='xxx',default='') #删除cookie set=cookie key:'' max_age = 0
ret = HttpResponse('xx')
ret.delete_cookie(key)
session
保存在服务器上的一组组键值对,依赖于cookie使用
为什么使用session?
- cookie是保存在浏览器本地,不太安全
- 浏览器会对cookie的大小和个数有一定的限制
django中操作session
#设置session
request.session[key] = value
#获取
request.session[key] request.session.get(key) #删除
del request.session[key]
request.session.pop(key) #将所有session 失效日期小于当前日期的数据删除
request.session.clear_expired()
#删除当前用户的所有session数据
request.session.delete() #不删除cookie
request.session.flush() #删除cookie
4. 配置
```python
SESSION_COOKIE_NAME = 'session'
SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
SESSION_SAVE_EVERY_REQUEST = True #每次请求后更新超时时间
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 关闭浏览器cookie就失效
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
#session保存的位置
#默认是数据库 缓存 缓存+数据库 文件 加密cookie
from django.contrib.sessions.backends import db
中间件(类似过滤器)
- Django中处理请求和响应的框架级别的钩子。本质上就是一个类 类定义5个方法 特定时执行这些方法
- 5个方法 4个特征
执行时间 执行顺序 参数 返回值
process_request(self,request)- 执行时间 :视图函数之前
- 参数:
- request:请求的对象和 视图函数是一个对象
- 执行顺序 : 按照注册的顺序 顺序执行
- 返回值:
- None 正常流程
- HttpResponse 不执行后续的中间件的process_request 、路由匹配、process_view、视图都不执行,直接执行当前中间件的process_response方法
process_response(self,request,response)
- 执行时间 :视图函数之后
- 参数:
- request:请求的对象和 视图函数是一个对象
- response:响应对象
- 执行顺序 : 按照注册的顺序 倒序执行
- 返回值:
- HttpResponse 必须返回response对象
process_view(self,request,view_func,view_args,view_kwargs)
执行时间 :路由匹配之后,视图函数之后
参数:
- request:请求的对象和 视图函数是一个对象
- view_func:视图函数 形参
- view_args:视图函数的位置参数 形参
- view_kwargs:视图函数关键字参数 形参
执行顺序 : 按照注册的顺序 顺序执行
返回值:
HttpResponse 之后的中间件的process_view 视图都不执行 执行最后一个中间件的process_response方法
正常执行顺序
返回response对象执行顺序
process_exception(self,request,exception)
- 执行时间(触发条件) :视图中有错误
- 参数:
- request:请求的对象和 视图函数是一个对象
- exception:异常对象
- 执行顺序 : 按照注册的顺序 倒序执行
- 返回值:
- None : 当前的中间件没有处理异常 交给下一个中间件处理异常 如果都没有处理异常 就让django处理异常
- HttpResponse对象 当前中间件处理了异常后面的process_exception就不执行了 执行最后一个中间件的process_response方法
process_template_response(self,request,response)
- 执行时间(触发条件) :视图中返回对象时一个TemplateResponse对象
- 参数:
- request :请求的对象和 视图函数是一个对象
- response :TemplateResponse对象
- 执行顺序 : 按照注册的顺序 倒序执行
- 返回值:
- HttpResponse对象 必须返回TemplateResponse对象
- 过程处理模板的名字参数
- response.template_name = 'index1_html'
- response.context_data['user'] = 'lsl'
JSON
- 轻量级的文本数据交互格式
- python
- 支持的数据类型
- 字符串 数字 布尔值 列表 字典 None
- 序列化
- python的数据类型————》》json字符串
- 反序列化
- json————》》python的数据类型
AJAX
ajax是一个js技术,实习异步交互
局部刷新
传输的数据量很小
<script>
$('#b1').click(function () {
$.ajax({
url:'/calc/',
type:'get',
data:{
'x1':$('[name="i1"]').val(),
'x2':$('[name="i2"]').val(),
},
success:function (data) {
$('[name="i3"]').val(data)
}
})
})
</script>ajax上传文件
$.ajax({
url:'/test/',
type:'get',
data:{
name:'李世林',
age:18,
hobby:JSON.stringify(['q','w','e','r'])
},
success:function (data) {
console.log(data);
console.log(data.stasus); }
})
使用ajax上传文件
$.ajax({
url:'/upload/',
type:'post',
data:formData,
processData: false,// ajax 不处理数据的编码
contentType: false,// 不修改content-type的请求头
success:function (data) {
alert(data) } })
from django.views.decorators.csrf import csrf_exempt,csrf_protect,ensure_csrf_cookie @csrf_exempt 加在视图函数上 该视图不需要进行csrf校验
@csrf_protect 加在视图函数上 该视图需要进行csrf校验
@ensure_csrf_cookie 加在视图上 确保返回时设置csrftoken的cookie
csrf的校验
从cookie中获取csrftoken的值
从request.POST中获取csrfmiddlewaretoken的值
把这两个值做对比 对比成功就接受请求 反之拒绝
前提:必须有csrftoken的cookie:
- 使用{% csrf_token %}
- 视图上加ensure_csrf_cookie装饰器
让ajax可以通过django的csrf的校验:
- 给data添加csrfmiddlewaretoken的键值对
- 给headers添加x-csrftoken的键值对(导入文件方式)
推荐:导入文件+确保有cookie
django_day06的更多相关文章
随机推荐
- Bika LIMS 开源LIMS集——实验室检验流程概述及主页、面板
主页 主页左侧为功能入口菜单.右侧含待办提醒,中间为工作区. 工作区功能将主要工作页面置于首页,便于用户操作. Dashboard 面板 系统面板 包括待排定的实验任务.实验中的任务数.复核/审核中的 ...
- 记安装AWVS14过程踩的坑
由于之前的AWVS14用着用着无法扫描了,一扫就是失败,一气之下就重装系统了.重装系统后发现安装还是不行,折腾了好久,终于找到方法了. 安装acunetix_14.1.210324124.exe 没啥 ...
- 『忘了再学』Shell流程控制 — 38、while循环和until循环介绍
目录 1.while循环 2.until循环 1.while循环 对while循环来讲,只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止.和for循环的第二种格式for((初始 ...
- Moriis神级遍历!
Moriis 遍历 Morris 遍历是二叉树遍历的一种方式,传统的递归和非递归遍历的时间复杂的都是O(N),空间复杂度都是O(h)(h为树的高度),而 Morris 遍历可以做到时间复杂的依然为 O ...
- 从一道算法题实现一个文本diff小工具
众所周知,很多社区都是有内容审核机制的,除了第一次发布,后续的修改也需要审核,最粗暴的方式当然是从头再看一遍,但是编辑肯定想弄死你,显然这样效率比较低,比如就改了一个错别字,再看几遍可能也看不出来,所 ...
- linux配置svn
1.安装 yum install subversion 2.测试安装是否成功: svnserve --version 3.创建目录并配置 建立版本库目录 mkdir -pv /data/svn/svn ...
- 如何用Fiddler对APP进行网络测试
什么是Fiddler Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出"Fiddler的数据(指co ...
- 006面试题__创建String对象
常见面试题: String s = new String("hello"); 问:创建了几个对象? 答:2个 1. 创建了一个字符常量池,指向了"hello"字 ...
- 04.nvue开发
nvue开发注意项 nvue专用内置组件跟api https://uniapp.dcloud.io/nvue-outline?id=_2开发nvue页面 网络示例 https://www.cnblog ...
- 一张图进阶 RocketMQ - 消息存储
前言 三此君看了好几本书,看了很多遍源码整理的 一张图进阶 RocketMQ 图片,关于 RocketMQ 你只需要记住这张图!觉得不错的话,记得点赞关注哦. [重要]视频在 B 站同步更新,欢迎围观 ...