• 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
    View Code

        效果图

        

          

      (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
    View Code

        效果图

        

        

       总结:

        

        也就是说,每一个请求都是先通过中间件中的 process_request 函数,这个函数返回 None 或者 HttpResponse 对象,如果返回前者,继续处理其它中间件,如果返回一个 HttpResponse,就处理中止,返回到网页上。

    六、 缓存
      5种配置
      3种应用:
        全局
        视图函数
        模板

    七、 信号
      - 内置信号
      - 自定义
      - 定义信号
      - 出发信号
      - 信号中注册函数

  • 相关阅读:
    Leetcode Substring with Concatenation of All Words
    Leetcode Divide Two Integers
    Leetcode Edit Distance
    Leetcode Longest Palindromic Substring
    Leetcode Longest Substring Without Repeating Characters
    Leetcode 4Sum
    Leetcode 3Sum Closest
    Leetcode 3Sum
    Leetcode Candy
    Leetcode jump Game II
  • 原文地址:https://www.cnblogs.com/willpower-chen/p/6264646.html
Copyright © 2020-2023  润新知