Django中间键与上下文处理器

中间件和上下文处理器

Django中间件(Middleware

是一个轻量级、底层的“插件”系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.

激活中间件

需要把它添加到Django配置文件中的MIDDLEWARE_CLASSES元组中.

自定义中间件

每个中间件组件是一个独立的Python类,可以定义下面方法中的一个或多个

  • _init _:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件
  • process_request(request):执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
  • process_view(request, view_func, view_args, view_kwargs):调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
  • process_template_response(request, response):在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象
  • process_response(request, response):所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象
  • process_exception(request,response,exception):当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象
例子:

settings.py同级目录下创建mymiddleware.py文件,定义类MyException,实现自定义异常process_exception方法

#---------mymiddleware.py------------

from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin

# 第一种方式
class MyException(MiddlewareMixin):
    def process_exception(self,request,exception):
        return HttpResponse(exception)
        
# 第二种方式
from ts22.models import UserModel
class UserMiddleware(MiddlewareMixin):
    def __init(self,get_response):
        self.get_response = get_response

    def __call__(self,request):
    	# request到达view之前执行的代码
        username = request.session.get('username','未登录')
        user = UserModel.objects.filter(username=username).first()
        if user and not hasattr(request,'myuser'):
            setattr(request,'myuser',user)
        response = self.get_response(request)
        # response到达用户浏览器之前执行的代码
        return response

将类MyException注册到settings.py中间件中

#---------setting.py------------

MIDDLEWARE_CLASSES = (
      ...
    'test11.mymiddleware.MyException',
    'test11.myMiddleware.UserMiddleware',
)

# 注test11是项目名。
模板上下文处理器(context processor)

settings.py中,包含了当前使用的上下文处理器。他的作用是可以给每一个response都提供自己想要添加的参数。

settings.py->TEMPLATES->OPTIONS->context_processors中使用的上下文处理器的作用:

django.template.context_processors.debug:增加一个debug变量。
django.template.context_processors.request:增加一个request的变量。
django.contrib.auth.context_processors.auth:增加了一个user的变量。
django.contrib.messages.context_processors.messages: 增加了一个messages的变量。
自定义上下文处理器:

中间件有点类似给request添加属性,而上下文处理器有点类似给模板添加属性的意思。一个是向上,一个是向下。

settings.py同级目录下创建mycontextprocessor.py文件,定义一个myuser的函数

#-------------mycontextprocessor.py------------
def myuser(request):
    username = request.session.get('username', '未登录')
    user = UserModel.objects.filter(username=username).first()
    if user:
        return {'myuser': username}
    else:
        return {}
        
# 注意:1.必须传入request作为参数  2.必须返回一个字典

将我们定义的上下文处理器放到settings.py->TEMPLATES->OPTIONS->context_processors中。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'test11.mycontextprocessor.myuser',
            ],
        },
    },
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值