django-自定义中间件

django的中间件
中间件是嵌入 django 的 request/response 处理过程的一套钩子框架。它是一个轻量级的底层嵌入系统,可以对 django 的输入输出做整体的修改。
django中间件
使用场景
1、如果你想修改请求,例如被传送到view中的HttpRequest对象。 或者你想修改view返回的HttpResponse对象,这些都可以通过中间件来实现。
2、可能你还想在view执行之前做一些操作,这种情况就可以用 middleware来实现。
3、比如我们写一个判断浏览器信息,是pc还是手机。我们不想把这个逻辑加到视图函数里,想作为一个通用服务,作为一个可插拔的组件被使用,最好的方法就是实现为中间件。

使用方法
Django中间件必须是一个类,不需要继承任何类,并提供四个接口:
1、 process_request(self, request)该方法在请求到来的时候调用。
2、 process_view(self ,request, fnc , arg ,kwarg)在本次将要执行的View函数被调用前调用本函数。
3、 process_response(self,request,response)在执行完View函数准备将响应发到客户端前被执行。
4、 **process_exception(self,request, exception)**View函数在抛出异常时该函数被调用,得到的exception参数是实际上抛出的异常实例。通过此方法可以进行很好的错误控制,提供友好的用户界面。

要激活中间件,需要把它添加到Django 配置文件settings.py中的MIDDLEWARE中。

例:需要检测浏览器版本信息。

1、app下新建 middleware.py文件
2、middleware.py中实现自定义中间键类

from django.http import HttpResponse
from django.shortcuts import render

try:
    from django.utils.deprecation import MiddlewareMixin  # Django 1.10.x
except ImportError:
    MiddlewareMixin = object  # Django 1.4.x - Django 1.9.x

class CheckVersionsMiddleware(MiddlewareMixin):
    def process_request(self, request):
        if 'rv:11.0' in request.META["HTTP_USER_AGENT"]:
            return render(request,"xxx.html")
            # return render(request,"upgrade.html")
        return None

3、settings.py中激活自定义中间件
MIDDLEWARE 中添加中间件, ‘app_name.middleware.CheckVersionsMiddleware’

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Django中,可以使用django-admin来创建自定义的RBAC认证系统。以下是一些步骤: 1. 创建一个新的Django应用程序: ``` python manage.py startapp rbac ``` 2. 在rbac应用程序中创建一个新的文件夹,命名为“rbac”。 3. 在rbac文件夹中创建一个新的文件,命名为“middleware.py”。 4. 在middleware.py中编写一个自定义的认证中间件类,可以参考下面的示例代码: ``` from django.contrib.auth.models import User class RbacMiddleware(object): def process_request(self, request): user = request.user if user.is_authenticated(): user_role = user.groups.first() if user_role: permissions = user_role.permissions.all() request.user_permissions = [p.codename for p in permissions] ``` 该中间件类的作用是在请求处理之前对用户进行认证,并将该用户的权限列表存储在请求对象中。 5. 在settings.py中配置中间件: ``` MIDDLEWARE_CLASSES = ( # ... 'rbac.middleware.RbacMiddleware', # ... ) ``` 6. 创建一个新的文件夹,命名为“rbac_templates”。 7. 在rbac_templates文件夹中创建一个新的文件,命名为“base.html”。 8. 在base.html中编写一个自定义的RBAC模板标签,可以参考下面的示例代码: ``` {% if perms.app_label.permission_name %} <!-- Display some content here --> {% endif %} ``` 该模板标签的作用是根据用户的权限列表显示或隐藏特定的内容。 9. 在需要进行RBAC认证的视图函数中使用模板标签,例如: ``` def my_view(request): return render(request, 'my_template.html', {}) ``` 10. 在my_template.html中使用自定义的RBAC模板标签: ``` {% extends 'rbac_templates/base.html' %} {% block content %} {% if perms.app_label.permission_name %} <h1>Welcome to my page!</h1> {% else %} <p>You do not have permission to view this page.</p> {% endif %} {% endblock %} ``` 以上就是使用django-admin自定义RBAC认证的一些步骤。需要注意的是,这只是一个简单的示例,实际情况可能更加复杂,需要根据具体的应用场景进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值