首页 > 其他分享 >Django之CBV装饰器、中间件、csrf跨站请求

Django之CBV装饰器、中间件、csrf跨站请求

时间:2023-08-11 15:47:54浏览次数:40  
标签:跨站 process 中间件 request Django django response def

一、CBV装饰器

要求:访问CBV函数视图需要先登录

1、含cookie的装饰器

# 登录认证装饰器cookie版
def login_auth(func):
    def inner(request, *args, **kwargs):
        if request.COOKIES.get('username'):
            return func(request, *args, **kwargs)
        else:
            return redirect('/login1/')

    return inner

2、views 视图函数

需要导入method_decorator装饰器模块

第一种方式:在方法上加装饰器

from django.views import View

from django.utils.decorators import method_decorator

class Login(View):
    # 必须登录之后才能访问get访问
    @method_decorator(login_auth)
    def get(self, request):
        return HttpResponse("get")

    @method_decorator(login_auth)
    def post(self, request):
        return HttpResponse("post")

第二种方式:在类上加装饰器

from django.views import View
from django.utils.decorators import method_decorator

@method_decorator(login_auth, name='get')
@method_decorator(login_auth, name='post')
class Login(View):
    # 必须登录之后才能访问get访问
    def get(self, request):
        return HttpResponse("get")

    def post(self, request):
        return HttpResponse("post")

注意:第二个参数name=‘’, 跟的是方法名

第三种方式:重写View类的 dispatch方法

from django.views import View
from django.utils.decorators import method_decorator


class Login(View):
    @method_decorator(login_auth)
    def dispatch(self, request, *args, **kwargs):
        return super(Login, self).dispatch(request, *args, **kwargs)

    # 必须登录之后才能访问get访问
    def get(self, request):
        return HttpResponse("get")

    def post(self, request):
        return HttpResponse("post") 

二、中间件

1、默认的7个中间件的作用

1.  django.middleware.security.SecurityMiddleware:提供了一些安全性功能,如点击劫持(clickjacking)保护、XSS(跨站脚本)保护等。它会自动添加适当的HTTP头,以增强应用的安全性。

2. django.contrib.sessions.middleware.SessionMiddleware:处理(session\cookie)数据。它为每个用户提供一个独立的会话,可以在多个HTTP请求之间存储临时数据。

3. django.middleware.common.CommonMiddleware:处理一些常见的HTTP头,如Content-Type,以及处理URL尾部的斜杠,确保URL的一致性。

4. django.middleware.csrf.CsrfViewMiddleware:处理CSRF(跨站请求伪造)保护。它会检查POST、PUT、DELETE等非安全请求中的CSRF令牌,以防止CSRF攻击。

5. django.contrib.auth.middleware.AuthenticationMiddleware:处理用户认证。它会根据用户登录状态和会话信息将用户对象添加到每个请求中。

6. django.contrib.messages.middleware.MessageMiddleware:处理消息通知,如使用messages模块在请求之间传递消息。

7. django.middleware.clickjacking.XFrameOptionsMiddleware:提供点击劫持(clickjacking)保护。它设置X-Frame-Options HTTP头,指示浏览器是否允许在<frame>、<iframe>、<embed>或<object>中显示页面。

2、自定义中间件

中间件就是一个类,然后这个类都继承了 MiddlewareMixin

其中 process_request 和 process_response 方法比较重要,其他方法看需求使用如:process_view、process_template

class MyMiddleware1(MiddlewareMixin):
    def process_request(self, request):
        # IP限制
        # 
        print("我是第一个自定义的中间件process_request")

    def process_response(self, request, response):
        print("我是第一个自定义中间件的process_response")
        return response  # 每一个process_response都必须有返回值response


class MyMiddleware2(MiddlewareMixin):
    def process_request(self, request):
        print("我是第二个自定义的中间件process_request")

    def process_response(self, request, response):
        print("我是第二个自定义中间件的process_response")
        return response  # 每一个process_response都必须有返回值response

注意:自定义中间件步骤:

1. 在项目名下或者任意的应用名下创建一个文件夹
2. 在这个文件夹下面创建一个py文件
3. 在该py文件中写一个自定义的类必须要继承MiddlewareMixin
4. 写完之后紧接着一定要去配置文件中注册中间件

3、中间件的执行顺序

执行顺序按照在MIDDLEWARE中定义的顺序,从上到下执行。

当一个请求进来时,这些中间件会依照这个顺序逐个处理请求(process_request)

然后在请求返回响应阶段按照相反的顺序逐个处理响应(process_re)

三、csrf跨站请求

1、

2、

3、

标签:跨站,process,中间件,request,Django,django,response,def
From: https://www.cnblogs.com/dgp-zjz/p/17621579.html

相关文章

  • Django原生分页功能的实现
    分页类的封装"""如果想要以后使用分页,需要以下两个步骤:在视图函数:defcustomer_list(request):#这里是获取搜索form表单提交的搜索关键字keyword=request.GET.get('keyword','').strip()#使用Q对象进行或查询con=Q()ifkeyword:con.c......
  • 关于django中如何让页面跳转时携带当前页面的参数
    需求分析:处理逻辑步骤:在跳转到目标url时,先要获取当前页url所携带的参数#当前页urlhttp://127.0.0.1:9000/customer/list/?page=11#获取当前页url所携带的参数request.GET.urlencode()#paeg=11构造跳转页面的url#原本跳转页链接http://127.0.0.1:9000/custo......
  • django中如何开启事务&启动锁
    django开启事务#先导入模块fromdjango.dbimporttransaction#开启事务try: withtransaction.atomic(): 操作数据库的代码块 (出现异常会回滚)exceptExceptionase: 出现异常会执行下面的代码django开启锁......
  • Django 标签未注册解决办法 Invalid block tag on line 9: 'ifequal'. Did you forget
     这是一个常见问题,但不要担心!一旦您了解了导致模板标记错误的原因,无论是拼写错误、语法还是忘记加载库,就可以轻松修复它。Django中的标签是什么?Django中的标签为Django模板添加了特殊功能,允许您在模板中执行操作。例如,使用标签,您可以以特定格式显示数据、循环访问上下文......
  • Python基础day63Django操作session和中间件使用
    Django操作cookie#设置cookie#获取cookieset_cookie('key','value',max_age=5,expires=5)参数:●key,键●value=’’,值●max_age=None,超时时间cookie需要延续的时间(以秒为单位)如果参数是\None``,这个cookie会延续到浏览器关闭为止expires=None,超时时间(......
  • 什么是迭代器,生成器,装饰器;django的信号用过吗?如何用,干过什么;什么是深拷贝,什么是浅拷贝
    什么是迭代器,生成器,装饰器;django的信号用过吗?如何用,干过什么;什么是深拷贝,什么是浅拷贝,如何使用什么是迭代器,生成器,装饰器#迭代器-迭代:一种不依赖于索引取值的方式,我们不需要关注它的位置,只要能够一个个取值,它就称之为迭代,python中就是for循环,内部调用对象.__next__()-可迭......
  • - Django操作cookie - Django操作session - CBV添加装饰器 - 中间件 - csrf跨站请求
    Django操作cookie设置cookie:对象点set_cookie()获取cookie:request点COOKIE点getset_cookie('key','value',max_age=5,expires=5)参数:KEY:k值value:V值max_age=None,超时时间cookie需要延续的时间(以秒为单位)如果参数是\None``,这个cookie会延续到浏览器关闭为止expires=No......
  • Django操作cookie,Django操作session,Django中的Session配置,CBV添加装饰器,中间件,cs
    Django操作cookiecookie参数:●key,键●value=’’,值●max_age=None,超时时间cookie需要延续的时间(以秒为单位)如果参数是\None``,这个cookie会延续到浏览器关闭为止expires=None,超时时间(IErequiresexpires,sosetitifhasn’tbeenalready.)path=’/‘,Co......
  • 中间件解析:提升并发编程能力,构建高性能系统
    用Netty开发中间件:高并发性能优化最近在写一个后台中间件的原型,主要是做消息的分发和透传。因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty4版本。Netty果然效率很高,不用做太多努力就能达到一个比较高的tps。但使用过程中也碰到了一些问题,个人觉得都......
  • vue+django跨域问题
    解决办法:MIDDLEWARE=['corsheaders.middleware.CorsMiddleware','yshop.middleware.AuthorizeMiddleware','django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware�......