• 【DJango学习】构造响应对象 设置session cookie 类装饰器 钩子函数(middleware)


    响应信息:起始行,响应头,响应体 

    视图接收请求并处理后,必须返回HttpResponse对象或子对象 

    HttpResponse(content=响应体,content_type=相应数据类型,status=状态码) # 默认200 状态码

    JsonResponse 相应信息返回json字符串 

    return JsonResponse({"city":"beijing"})  # 不需要手动设置 响应头 content-type=application/json  和转换成json字符串 

    redirect 

    return redirect('/index.html') 配置reverse使用 尽量不要使用绝对路径

    设置cookie

     HttpResponse.set_cookie(cookie名 ,value = cookie值 ,max_age = cookie有效期 单位秒)

    request.COOKIES.get('cookie名')  # 获取cookie 字典类型 

    设置session  cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。

    广义 session机制 : 多次HTTP请求之间的关系 会话机制 状态数据 如:登陆状态 

    狭义 seesion数据 : 记录的状态数据  例如:登陆后记录的user_id 等等      

    Django默认存放在数据库中

    本地缓存需要修改 session_engine = Django.contrib.sessions.backends.cache 

    引用redis  

    1、安装拓展 pip install django-redis 

    2、配置  setting.py 

    CACHES = {
        "default": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1:6379/1",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
            }
        }
    }
    SESSION_ENGINE = "django.contrib.sessions.backends.cache"
    SESSION_CACHE_ALIAS = "default"

    操作session 

    request.session['key'] = value

    request.session.get['key']

    request.session.clear()  清空所有值

    request.session.flush()  清空整条 记录

    del request.session['key'] 删除 键值

    request.session.set_expiry(value)  0 -->临时会话 , 整数 单位秒 , None  两周默认值 

    session_cookie_age 秒为单位 全局默认值  

    装饰器调用

    # 装饰器
    def my_decorator(func): def wrapper(request,
    *args, **kwargs): print('自定义装饰器被调用了') print('请求路径%s' % request.path) return func(request, *args, **kwargs) return wrapper class DemoView(View): def get(self, request): print('get方法') return HttpResponse('ok') def post(self, request): print('post方法') return HttpResponse('ok')

    中间件

    middleware.py

    def my_middleware(get_response):
        # 编写执行前
        print("init 被调用")
    
        def middleware(request):
            # 调用前
            print("before request  被调用")
            response = get_response(request)
            # 调用后
            print("after request  被调用")
            return response
    
        return middleware

    settings.py

    MIDDLEWARE = ["middleware.my_middleware"
    ]

    类似于flask钩子函数 执行前 调用前 调用后  

    中间件执行顺序:调用自下而上 , before自上而下,after自下而上 

  • 相关阅读:
    客户端本地存储,web存储,localStorage
    js地理定位对象 navigator.geolocation
    使用defined和require引入js
    VUE的使用方法
    $.each()的用法
    jQuery的deferred对象详解
    jquery 中prop()的使用方法
    IE7下对某些seajs压缩文件不兼容的解决方法
    饼状图注释
    $.grep()的用法
  • 原文地址:https://www.cnblogs.com/oscarli/p/12322697.html
Copyright © 2020-2023  润新知