知识点概要
  - 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自动开发之第二十二天的更多相关文章

  1. python自动开发之第二十五天

    一.组合搜索 参考: http://www.cnblogs.com/ccorz/p/5985205.html 二.JSONP 1.在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据的,但 ...

  2. python自动开发之第二十四天(Django)

    一.ModelForm操作及验证 1.class Meta:class Meta: #注意以下字段不能加逗号 model = models.UserInfo #这里的all代指所用的字段,也可以是一个 ...

  3. python自动开发之第二十三天(Django)

    一.一大波model操作 1. 创建数据库表 # 单表 # app01_user ==> tb1 # users class User(models.Model): name = models. ...

  4. python自动开发之第十二天

    一.数据库的介绍 (1)由多张表组成(2)存取有规则,数据有关联(3)数据量大,被优化 好处:更有效的存取数据 二.关系型数据库管理系统(RDBMS) Oracle,Mysql,Sqlserver,D ...

  5. python自动开发之(算法)第二十七天

    1.什么是算法? 算法(Algorithm):一个计算过程,解决问题的方法 2.复习:递归 递归的两个特点:(1) 调用自身 (2)结束条件 def func1(x): print(x) func1( ...

  6. python自动开发之第十三天

    1.Paramiko模块下的demo.py程序     前面利用Python中的Paramiko模块可以进行SSH的连接,以及用来传送文件(SFTP),但是无论是哪一种方式,连接都是短暂的,并非是长连 ...

  7. python+flask开发小白第二天

    使用VSCode编译python web页面 1.先从最基础的说起吧,关于VSCode的使用: 运行python程序与运行java,c,c++程序一样,需要新建一个文件,第一个文件建议不要新建在本地的 ...

  8. python自动开发之第二十一天

    一.请求周期 url> 路由 > 函数或类 > 返回字符串或者模板语言? 1.Form表单提交: 提交 -> url > 函数或类中的方法 - .... HttpResp ...

  9. python自动开发之第十八天

    一.JS正则 test - 判断字符串是否符合规定的正则 rep = /\d+/; rep.test("asdfoiklfasdf89asdfasdf") # true rep = ...

随机推荐

  1. Java中的日志——Java.util.logging、log4j、commons-logging

    Java中给项目程序添加log主要有三种方式,一使用JDK中的java.util.logging包,一种是log4j,一种是commons-logging.其中log4j和commons-loggin ...

  2. getline读取整行文本// isprint

    getline——读取整行文本 这个函数接受两个参数:一个输入流对象和一个string对象.getline函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符.和输入操作符不一样 ...

  3. 【bzoj2073】[POI2004]PRZ 状态压缩dp

    题目描述 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍过桥时只能分批 ...

  4. FTP-Server

    1.目录: 2. ftp_client.py import socket,os,json client=socket.socket() client.connect(('localhost',9999 ...

  5. POJ1990:MooFest——题解

    http://poj.org/problem?id=1990 题目大意:定义一对在树轴上的点,每对点产生的值为两点权值最大值*两点距离,求点对值和. 显然n*n复杂度不行,我们需要用树状数组维护两个东 ...

  6. 洛谷 P3959 宝藏 解题报告

    P3959 宝藏 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 \(n\) 个深埋在地下的宝藏屋, 也给出了这 \(n\) 个宝藏屋之间可供开发的 \(m\) 条道路和它们的长度. 小 ...

  7. UVA.122 Trees on the level(二叉树 BFS)

    UVA.122 Trees on the level(二叉树 BFS) 题意分析 给出节点的关系,按照层序遍历一次输出节点的值,若树不完整,则输出not complete 代码总览 #include ...

  8. AOJ 7.Redraiment猜想

    Redraiment猜想 Description redraiment在家极度无聊,于是找了张纸开始统计素数的个数. 设函数f(n)返回从1->n之间素数的个数. redraiment发现: f ...

  9. de4dot 用法

    使用de4dot反混淆一下 用法 de4dot -f input.dll -o output.dll

  10. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) A map B贪心 C思路前缀

    A. A Serial Killer time limit per test 2 seconds memory limit per test 256 megabytes input standard ...