zoukankan      html  css  js  c++  java
  • django文档总结之会话保持、视图、中间件(2)

    状态保持

    1 在浏览器中以键-值存储;默认过期时间为关闭浏览器时

    2 基于域名安全,不同cookie不能互相访问

    3 浏览器会自动将cookie信息包含在请求头中发送给服务器

    写入:response.set_cookie(键,值,max_age=秒)
    
    读取:name = request.COOKIES.get(键)   	return HttpResponse(name)
    
    删除:response.delete_cookie(键)
    

    session

    1 在数据库中以键-值存储;默认过期2周

    2 终端安装扩展:

    pip install django-redis
    

    3 settings.py中的MIDDLEWARE中默认启动session

    4 在settings.py中配置django的缓存,设置session的存储方案

    配置django的缓存:获取耗资源,数据变化小

    CACHES = {
    
        "default": {
    
            "BACKEND": "django_redis.cache.RedisCache",
    
            # 可以修改:reides的服务器ip,端口,数据库
    
            "LOCATION": "redis://127.0.0.1:6379/1",
    
            "OPTIONS": {
    
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
    
            }
    
        }
    
    }
    

    设置session的存储方案:与cache一致

    SESSION_ENGINE = "django.contrib.sessions.backends.cache"
    
    SESSION_CACHE_ALIAS = "default"
    
    写入:request.sesison[键]=值 request.session.set_expiry(秒)
    
    读取:name = request.session.get(键)
    
    	return HttpResponse(name)
    
    删除:del request.session['键']
    

    类视图

    类视图使用

    好处:代码可读性好,可以将不同的请求方式定义成不同的函数,但可以共用同一个请求地址

    1 定义类RegisterView,继承于View,导入(from django.views import View)

    2 在类中定义函数:函数名为请求方式的小写

    3 注册类视图路由:url('^RegisterView$', views.RegisterView.as_view())

    类视图使用装饰器

    1 在新文件decorators.py 中定义装饰器

    def register(f):
    
    	def fun(*args, **kwargs):
    
    		print("-----自定义装饰器被调用")
    
    		return f(*args, **kwargs)
    
    	return fun
    

    2 在类视图中的函数上添加

    导入 from . import decorators

    类里的函数前加@decorators.register

    3 直接在类视图上添加

    导入 from django.utils.decorators import method_decorator

    类上加 @method_decorator(decorators.register, name='dispatch')

    (装饰器名称,name='实例方法的名称')--dispatch(表示全部)

    4 (不推荐使用)可以使用装饰器的原生语法:装饰器(函数)

    5 使用多继承扩展类***Mixin

    中间件

    使用:1类似于装饰器;2定义类(了解)

    1 在新文件middleware.py 中定义中间件

    def my_middleware(view_fun):
    
    	def func1(*args, **kwargs):
    
    		print("----视图执行前处理的代码")
    
    		response = view_fun(*args, **kwargs)
    
    		print("----视图执行后处理的代码")
    
    		return response
    
    	return func1
    

    2 注册:settings.py中MIDDLEWARE['users.middleware.my_middleware',]

    3 多个中间件执行顺序:

    以视图函数为分界
    
    视图执行前按注册顺序由上向下
    
    视图执行后按注册顺序由下向上
    

    4 CSRF中间件

    • 将token保存在session或cookie中
    • 请求为POST等请求时,从请求报文中获取token,并从存储中获取token
    • 将两个token进行对比
  • 相关阅读:
    在SUSE12中使用 Machinery 进行高级系统管理
    有多个git项目要用多个秘钥
    Manage, Administrate and Monitor GlassFish v3 from Java code usingAMX & JMX
    apc smart UPS下使用apcupsd注意事项
    Eclipse用法和技巧二十二:快速调整字体大小
    OpenGL(十三) Alpha测试、剪裁测试
    什么图用什么工具画?
    什么图用什么工具画?
    scipy —— 丰富的子包(io、cluster)
    scipy —— 丰富的子包(io、cluster)
  • 原文地址:https://www.cnblogs.com/davis12/p/14376821.html
Copyright © 2011-2022 走看看