CBV中加装饰器/Django的中间件/csrf跨站请求伪造(lnh25)

本文介绍了Django中Class-BasedView(CBV)如何添加装饰器,以及Django中间件的工作流程和方法,如process_request和process_response。同时,文章讨论了自定义中间件的步骤,并对比了Django和Flask中间件的差异。此外,还探讨了防止CSRF攻击的方法,包括在ajax请求中处理CSRF验证的策略。
摘要由CSDN通过智能技术生成

 

CBV中加装饰器

from django.utils.decorators import method_decorator
# CBV中添加装饰器

# @method_decorator(login_auth, name='get')
# @method_decorator(login_auth, name='post')  # 方式2
class Login(View):
    @method_decorator(login_auth)  # 类里面所有的方法都加了装饰器
    def dispatch(self, request, *args, **kwargs):
        return super(Login, self).dispatch(request, *args, **kwargs)
    # @login_auth
    # @method_decorator(login_auth)  # 方式1
    def get(self, request):
        print('getaaa')
        return HttpResponse('getaaa')

    def post(self, request):
        print('postaaaa')
        return HttpResponse('postaaaa')

Django的中间件

# django的请求声明周期流程图
1. 请求来了先经过中间件
2. 响应走了最后,也要经过中间件

# django自带的有七个中间件
django的中间件给我们暴露了一些方法
class SessionMiddleware(MiddlewareMixin):
     def process_request(self, request):
            session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME)
            request.session = self.SessionStore(session_key)

     def process_response(self, request, response):
        return response
    
# 它提供了几个方法
1. 需要我们掌握的有:
	process_request
    process_response
2. 了解的方法:
	process_view----------------》是跟视图函数相关的
    process_exception----------------》跟异常相关的
    process_template_response----------------》跟模板相关的
    
# 在一个中间件中,暴露的这几个方法不是每个类都必须有的,而是需要什么就写什么

自定义中间件

# django默认提供的有几个中间件
它还支持程序员自己定义中间件

# 自定义中间件的步骤:
1. 在项目名下或者应用名下新建一个任意名称的文件夹
2. 在这个文件夹下面新建一个py文件
3. 在这个py文件中,新建一个类,必须继承MiddlewareMixin
4. 在你新建的这个类下面写哪几个方法:
	process_reqeust
    process_response
5. 一定要在配置文件的中间件里面注册你的中间件路径

# 针对process_reqeust
	1. 执行顺序是按照配置文件中注册的顺序,从上往下依次执行
    2. 视图函数在中间件的process_reqeust函数之后执行
    3. 如果在process_reqeust里面直接返回HttpResponse,之后的中间件一律不在走了,包括视图函数
# # 针对process_response
 	1. 必须要返回一个HttpResponse
    2. 执行顺序:是按照配置文件的注册顺序,从下往上依次执行

# 最后一个问题:
研究我在第一个中间件的process_reqeust方法中,直接返回HttpResponse,然后,观察所有中间件的process_response的执行顺序?
# 结论:如果在第一个中间件中得process_reqeust中直接拦截,只走第一个中间件的process_reqeust和第一个中间件的process_response,直接原路返回.

# 但是,在flask框架中,如果你在第一个拦截了,后面的类似于是process_response都会走一遍.
'''flask框架中实际上没有真正的中间件,它是需要你看源码自己做成类似于django的这种中间件'''

csrf跨站请求伪造

# 背景信息
钓鱼网站
“钓鱼网站”的页面与真实网站界面基本一致,欺骗消费者或者窃取访问者提交的账号和密码信息
eg:
	现在有一个正规的中国银行的网站,我自己也写一个页面根中国银行的页面完全一模一样
    有个客户去中国银行转行,不小心来到了我的这个钓鱼网站,开始在这个钓鱼网站转账,转账完毕之后,钱也少了,这个也达到了中国银行,但是,它想转账的这个对方账户不是它自己想要的哪个账户.
    
# 针对上述情况,它是怎么做到的
# 内部本质
在钓鱼网站上的form表单中,它是写一个没有name属性的input框,它在这个input框下面,在隐藏一个input框,这个隐藏的input框,我给他提前写好name属性和value值,但是用户不知道

# 如何规避上述问题?
在正规网站中给form表单一个唯一标识,然后,表单每次提交的时候,后端都做一个验证没如果正确就可以提交,如果不正确,就直接403(forbidden)


# 来研究ajax如何规避csrf的验证?
  $('.btn').click(function () {
        $.ajax({
            url: '',
            type: 'post',
            // 方式1:
            {#data: {'username': 'kevin', 'csrfmiddlewaretoken': $("[name='csrfmiddlewaretoken']").val()},#}
            // 方式2
            {#data: {'username': 'kevin', 'csrfmiddlewaretoken': '{{ csrf_token }}'},#}
            data: {'username': 'kevin'},
            // 方式3,使用js
            success: function (res) {

            }
        })
    })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑猪去兜风z1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值