Django微讲解(十)

Django微讲解(十)

Django操作cookie

# 1.加盐处理
	set_signed_cookie(key,value,salt=加密盐)  # 加密盐只能是字符串
# 2.超时时间
	set_signed_cookie(key,value,max_age=超时时间)  # 超时时间默认是秒数
    expires:专门针对IE浏览器设置超时时间
# 3.主动清除cookie
	HttpResponse对象.delete_cookie(key) 

Django操作session

# 1.设置
	request.session['key'] = value   # 可以设置分组
# 2.获取
	request.session.get('key')  # 可以获取多组
# 3.内部机制
	服务端保存用户相关状态信息,返回给客户端随机字符串,然后客户端进行保存。session针对保存,Django需要一张表来处理,
这张表就是我们执行数据库迁移命令的时候自动生成的django_session表。
# 4.设置session内部发生的事情
	1.产生一个随机字符串
	2.表中存储随机字符串与加密数据的对应关系
	3.将产生的随机字符串发给客户端,并让其保存,客户端保存的格式是sessionid:随机字符串
# 5.获取session内部发生的事情
	1.自动获取客户端请求中的随机字符串
	2.自动去django_session表中进行数据比对
	3.如果比对成功自动获取并进行解密处理
'''
django默认的session失效时间是14天
'''

Django操作session

# 1.获取产生的随机字符串
	request.session.session_key
# 2.删除操作
	request.session.delete()  # 只删客户端
	request.session.flush()  # 服务端、客户端都删除
# 3.设置超时时间
	request.session.set_expiry(value)
    1.如果value是整数,就相当于是秒数
    2.如果value是datatime或timedelta,session就会在这个时间点消失
    3.如果value是0,关闭浏览器session就会失效
    4.如果value是None,session会依赖全局session失效策略
# 4.session数据的存储位置
	1.数据库存储
    2.缓存存储
    3.文件存储
    4.缓存加数据库存储
    5.动态加密

CBV添加装饰器

	CBV添加装饰器需要借助一个专门的装饰器模块'from django.utils.decorators import method_decorator
'
# 1.直接在类中给方法添加装饰器
	from django import views
    from django.utils.decorators import method_decorator
    class MyViews(views.View):
        @method_decorator(login_auth)
        def get(self,request):
            return HttpResponse('这是get')
        def post(self,request):
            return HttpResponse('这是post')
# 2.直接在类名上添加并指定
	from django import views
    from django.utils.decorators import method_decorator
    @method_decorator(login_auth,name='post')
    class MyViews(views.View):
        def get(self,request):
            return HttpResponse('这是get')
        def post(self,request):
            return HttpResponse('这是post')
# 3.重写dispatch方法并添加作用于类中所有的方法
	from django import views
    from django.utils.decorators import method_decorator
    class MyViews(views.View):
        def get(self,request):
            return HttpResponse('这是get')
        def post(self,request):
            return HttpResponse('这是post')
        @method_decorator(login_auth)
        def dispatch(self, request, *args, **kwargs):
            super().dispatch(request, *args, **kwargs)

Django中间件

	Django中间件是Django的门户,自带七个中间件,每个都有各自对应的功能,这七个中间件每个都有很多的功能和方法,Django
还支持自定义中间件,并提供了五个可以自定义的方法,分别是'process_request'、'process_response'、'process_view'、
'process_template_response'、'process_excepton',只要是全局相关的功能都可以在中间件中编写。

自定义中间件

# 1.自定义中间件准备
	1.创建一个任意名称的文件夹
    2.在该文件夹内创建一个任意名称的py文件
    3.在该py文件内编写中间件
    4.编写完成之后去配置文件中注册
# 2.process_request,请求来的时候执行
	请求来的时候会自上而下依次执行配置文件中已经注册的中间件里面的process_request方法,如果没有就跳过,如果该方法自
己返回来HttpResponse对象,那么请求不再继续往后,直接返回响相应的数据。如果process_request返回了HttpResponse对象,那么
就会从当前位置从下往上依次执行每一个process_response方法。
# 3.process_response,响应走的时候执行
	响应走的时候会从下往上依次执行配置文件中已经注册的中间件里面的process_response方法,如果没有就跳过,如果该方法
自己返回了HttpResponse对象,那么响应会替换成HttpResponse对象的数据,而不是视图函数返回给客户端的数据。
# 4.process_view
	路由匹配成功之后执行视图之前,从上往下执行配置文件中注册的中间件里面的process_view方法。
# 5.process_template_response
	视图函数执行完毕之后返回的对象中含有render属性对应一个render方法,就会从下往上执行配置文件中注册的中间件里面的
process_template_response方法。
# 6.process_exception
	视图函数执行过程中报错并在返回响应的时候从下往上执行配置文件中注册的中间件里面的process_exception方法。

csrf跨站请求

	csrf跨站请求,举一个简单的例子,就好比钓鱼网站,模仿正规网站的网址,诱骗用户在网站上做本应该在正规网站的操作,
从而获取到该用户的数据或者财产。钓鱼网站其实用到的就是csrf跨站请求。
# csrf解决策略
1.方式一:
	在form表单中加一个模板语法,{% csrf_token %}
    代码演示:
        <form action="" method="post">
        {% csrf_token %}
        <p>当前账户:<input type="text" name="current_user"></p>
        <p>目标账户:<input type="text" name="target_user"></p>
        <p>转账金额:<input type="text" name="money"></p>
        <input type="submit">
        </form>
2.方式二:
    使用ajax请求
    (1).在页面任意位置先写模板语法{% csrf_token %},获取数据
    代码演示:
        data:{'csrfmiddlewaretoken':$('input[name="csrfmiddlewaretoken"]').val()}
	(2).模板语法直接获取
    代码演示:
        data:{'csrfmiddlewaretoken':{% csrf_token %}}
posted @ 2022-05-24 22:47  陆禄绯  阅读(42)  评论(0编辑  收藏  举报