zoukankan      html  css  js  c++  java
  • 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种应用:
        全局
        视图函数
        模板

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

  • 相关阅读:
    An unhandled exception occurred while processing the request.
    PIP升级或更新、PIP 升级 或 更新 失败
    SQL求两个时间差
    EF Core DBFirst 和Code First小结
    Core + Vue 后台管理基础框架9——统一日志
    .Net Core 访问 appsettings.json
    IdentityServer4 (5) 混合模式(Hybrid)
    C# async/await、WhenAll、ContinueWith 实战应用(异步做早餐)
    .NET Core Web APi FormData多文件上传,IFormFile强类型文件灵活绑定
    Unity3D天气系统插件UniStorm插件使用说明
  • 原文地址:https://www.cnblogs.com/willpower-chen/p/6264646.html
Copyright © 2011-2022 走看看