知识点概要
  - 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. 第70天:jQuery基本选择器(一)

    一.jQuery基本选择器 jQuery是javascript的一个库,包含多个可重用的函数,用来辅助我们简化javascript开发 jQuery能做的javascipt都能做到,而javascri ...

  2. 【MVC】ASP.Net MVC 4项目升级MVC 5的方法

    1.备份你的项目 2.从Web API升级到Web API 2,修改global.asax,将 ? 1 WebApiConfig.Register(GlobalConfiguration.Config ...

  3. intelliJ IDEA最常用的快捷键

    一.使用相关快捷键 1.重写接口实现类:Ctrl+I 2.搜索:Shift+Shift   3.生成get或set方法快捷键:Alt+insert: 4.导入未实现的方法,强制类型转换:Alt+Ent ...

  4. MATLAB中的randi函数

    randi Pseudorandom integers from a uniform discrete distribution.来自一个均匀离散分布的伪随机整数 R = randi(IMAX,N) ...

  5. 海盗船长小米首页小船来回摆动CSS3.0效果

    海盗船长小米首页小船来回摆动CSS3.0效果,偶然之间看到的,就写了一个. <!DOCTYPE html> <html lang="en"> <hea ...

  6. [POI2014]FAR-FarmCraft 树形DP + 贪心思想

    (感觉洛谷上题面那一小段中文根本看不懂啊,好多条件都没讲,直接就是安装也要一个时间啊,,,明明不止啊!还好有百度翻译......) 题意:一棵树,一开始在1号节点(root),边权都为1,每个点有点权 ...

  7. [Leetcode] Sum root to leaf numbers求根到叶节点的数字之和

    Given a binary tree containing digits from0-9only, each root-to-leaf path could represent a number. ...

  8. BZOJ1911 [Apio2010]特别行动队 【斜率优化】

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 5005  Solved: 2455 [Submit][Sta ...

  9. Tomcat启动时报org.springframework.web.context.ContextLoaderListener错误解决方案

    问题现象:新从svn上检出maven的项目maven+spring+springmvc项目在Tomcat启动时,报如下错误. 严重: Error configuring application lis ...

  10. 允许Traceroute探测

    允许Traceroute探测 漏洞描述: 允许Traceroute探测 漏洞描述 本插件使用Traceroute探测来获取扫描器与远程主机之间的路由信息.攻击者也可以利用这些信息来了解目标网络的网络拓 ...