python自动开发之第二十二天
知识点概要
- Session
- CSRF
- Model操作
- Form验证(ModelForm)
- 中间件
- 缓存
- 信号
一、 Session
基于Cookie做用户验证时:敏感信息不适合放在cookie中
a. Session原理
Cookie是保存在用户浏览器端的键值对
Session是保存在服务器端的键值对
b. Cookie和Session对比
c. Session配置(缺少cache)
d. 示例:实现两周自动登陆
- request.session.set_expiry(60*60*24*14)
- SESSION_SAVE_EVERY_REQUEST = True
PS: cookie中不设置超时时间,则表示关闭浏览器自动清除
- session依赖于cookie
- 服务器session
request.session.get()
request.session[x] = x
request.session.clear()
- 配置文件中设置默认操作(通用配置):
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
# set_cookie('k',123)
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)
- 引擎的配置
二、 CSRF
a. CSRF原理
b. 无CSRF时存在隐患
c. Form提交(CSRF)
d. Ajax提交(CSRF)
CSRF请求头 X-CSRFToken
三、 Model操作
a. 字段类型 + 参数
b. 连表字段 + 参数
c. Meta
d. SQL操作:
- 基本增删改查
- 进阶操作
- 正反查询
- 其他操作
e. 验证(弱)
四、 Form操作
完成:
- 验证用户请求
- 生成HTML
(保留上一次提交的数据)
自定义:
- 类
- 字段(校验)
- 插件(生成HTML)
初始化操作:
五、中间件
1、中间件创建
(1)创建一目录Middle下创建一py文件
(2)配置文件中添加中间件
2、中间件生命周期
(1)正常流程
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse class Row1(MiddlewareMixin):
def process_request(self,request):
print('第一层第一列')
#注意下面的request和response的顺序
def process_response(self, request,response):
print('第一层第二列')
return response class Row2(MiddlewareMixin):
def process_request(self,request):
print('第二层第一列')
#如果到这里请求直接返回的话,10版的会直接从同一层response返回
#10版以前的会到最后一个中间键开始返回response
# return HttpResponse('请求截胡') def process_response(self, request, response):
print('第二层第二列')
return response class Row3(MiddlewareMixin):
def process_request(self,request):
print('第三层第一列')
def process_response(self, request, response):
print('第三层第二列')
return response
效果图
(2)提前截胡,在同一层的request直接响应请求,不会往下一层走了
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse class Row1(MiddlewareMixin):
def process_request(self,request):
print('第一层第一列')
#注意下面的request和response的顺序
def process_response(self, request,response):
print('第一层第二列')
return response class Row2(MiddlewareMixin):
def process_request(self,request):
print('第二层第一列')
#如果到这里请求直接返回的话,10版的会直接从同一层response返回
#10版以前的会到最后一个中间键开始返回response
return HttpResponse('请求截胡') def process_response(self, request, response):
print('第二层第二列')
return response class Row3(MiddlewareMixin):
def process_request(self,request):
print('第三层第一列')
def process_response(self, request, response):
print('第三层第二列')
return response
效果图
总结:
也就是说,每一个请求都是先通过中间件中的 process_request 函数,这个函数返回 None 或者 HttpResponse 对象,如果返回前者,继续处理其它中间件,如果返回一个 HttpResponse,就处理中止,返回到网页上。
六、 缓存
5种配置
3种应用:
全局
视图函数
模板
七、 信号
- 内置信号
- 自定义
- 定义信号
- 出发信号
- 信号中注册函数
python自动开发之第二十二天的更多相关文章
- python自动开发之第二十五天
一.组合搜索 参考: http://www.cnblogs.com/ccorz/p/5985205.html 二.JSONP 1.在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据的,但 ...
- python自动开发之第二十四天(Django)
一.ModelForm操作及验证 1.class Meta:class Meta: #注意以下字段不能加逗号 model = models.UserInfo #这里的all代指所用的字段,也可以是一个 ...
- python自动开发之第二十三天(Django)
一.一大波model操作 1. 创建数据库表 # 单表 # app01_user ==> tb1 # users class User(models.Model): name = models. ...
- python自动开发之第十二天
一.数据库的介绍 (1)由多张表组成(2)存取有规则,数据有关联(3)数据量大,被优化 好处:更有效的存取数据 二.关系型数据库管理系统(RDBMS) Oracle,Mysql,Sqlserver,D ...
- python自动开发之(算法)第二十七天
1.什么是算法? 算法(Algorithm):一个计算过程,解决问题的方法 2.复习:递归 递归的两个特点:(1) 调用自身 (2)结束条件 def func1(x): print(x) func1( ...
- python自动开发之第十三天
1.Paramiko模块下的demo.py程序 前面利用Python中的Paramiko模块可以进行SSH的连接,以及用来传送文件(SFTP),但是无论是哪一种方式,连接都是短暂的,并非是长连 ...
- python+flask开发小白第二天
使用VSCode编译python web页面 1.先从最基础的说起吧,关于VSCode的使用: 运行python程序与运行java,c,c++程序一样,需要新建一个文件,第一个文件建议不要新建在本地的 ...
- python自动开发之第二十一天
一.请求周期 url> 路由 > 函数或类 > 返回字符串或者模板语言? 1.Form表单提交: 提交 -> url > 函数或类中的方法 - .... HttpResp ...
- python自动开发之第十八天
一.JS正则 test - 判断字符串是否符合规定的正则 rep = /\d+/; rep.test("asdfoiklfasdf89asdfasdf") # true rep = ...
随机推荐
- MongoDB、ElasticSearch、Redis、HBase这四种热门数据库的优缺点及应用场景
MongoDB MongoDB是当今最火爆的NoSQL数据库.MongoDB最早在09年发布,算得上是早期大数据时代的数据库代表作了.随着MongoDB的火爆,研发MongoDB的团队还专门成立了Mo ...
- 前端基础:JavaScript BOM对象
JavaScript BOM对象 JavaScript Window - 浏览器对象模型 浏览器对象模型(BOM)使JavaScript有能力与浏览器"对话". 浏览器对象模型(B ...
- shell脚本学习—条件测试和循环语句
条件测试 1. 条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假, 则命令的Exit Status为1(注意与 ...
- 详解 ES6 Modules
详解 ES6 Modules 对于新人朋友来说,想要自己去搞定一个ES6开发环境并不是一件容易的事情,因为构建工具的学习本身又是一个非常大的方向,我们需要花费不少的时间才能掌握它. 好在慢慢的开始有大 ...
- Java实验报告(实验四)
北京电子科技学院(BESTI) 实 验 报 告 课程:Java 班级:1352班 姓名:王国伊 学号:20135207 成绩: 指导 ...
- HDU.1596 find the safest road (Floyd)
HDU.1596 find the safest road (Floyd) 题意分析 与普通的最短路不太相同,本题有些许的变化. 1. 要找到由i到j最安全的路,故在求解的时候要保证mp[i][j]尽 ...
- poj2409:Let it Bead(置换群 polya定理)
题目大意:长度为n的项链,要染m种颜色,可以通过旋转或翻转到达的状态视为同一种,问有多少种染色方案. 学了一波polya定理,发现很好理解啊,其实就是burnside定理的扩展. burnside定理 ...
- stout代码分析之五:UUID类
UUID全称通用唯一识别码,被广泛应用于分布式系统中,让所有的元素具有唯一的标识. stout中UUID类继承自boost::uuids::uuid.api如下: random, 产生一个UUID对象 ...
- HDU1384 差分约束
Intervals Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- Reduce Side Join实现
关于reduce边join,其最重要的是使用MultipleInputs.addInputPath这个api对不同的表使用不同的Map,然后在每个Map里做一下该表的标识,最后到了Reduce端再根据 ...