django 中间件 request.path 与get_full_path

本文介绍了Django中间件的用途,特别是如何利用`request.path`和`get_full_path`记录用户请求URL。通过创建自定义中间件UrlPathMiddleWare,中间件在处理视图前过滤并记录用户请求,不包括登录等特定URL。同时,解释了中间件的六个关键函数在整个请求响应过程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

中间件的用途一:可以记录请求的url,应用场景:当客户输入用户中心或购物车的网址,如果客户还没有登录,就跳转到登陆页面,登录后直接进入客户刚才输入的用户中心或购物车,所以需要中间件记录客户请求的url,但不记录登录的url,这时,要进行判定url,再做记录。

如何使用中间件:1在应用(如df_user)中创建middleware.py文件,写中间件类(如UrlPathMiddleWare),类名自定义,其中中间件的函数必须是下面中的,名字一致

2 在项目中settings中注册中间件:

MIDDLEWARE_CLASSES = (
  'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'df_user.middleware.UrlPathMiddleWare',
)


中间件类(例子):

class UrlPathMiddleWare():


    #处理视图前中间件函数,会将静态文件路径去除,剩下真正能匹配视图的url,所以选择这个中间件
    def process_view(self, request, view_func, view_args, view_kwargs):



    # 在开发阶段,没有部署nginx时,当请求的网页中的静态文件没找到时,url后面就会加上静态文件的路径,
    # 导致在下面的函数中进行列表中元素判断时,无法排除,如果真实运行后,部署了nginx,静态文件加载就不会走uwsig这条路
    # 处理请求前的中间件函数
    # def process_request(request):



        # 这是获得全路径的一个方法 /user/register_name/?name=frank 后面携带参数
        # path = request.get_full_path()


        # 这是获得路径的一个属性 /user/register_name/ 后面不携带参数
        path = request.path


        # print(path + 'hsssss')
        if path not in ['/user/login/', '/center/is_login/', '/user/register/',
                    '/user/register_handle/', '/user/login_handle/',
                    '/user/register_name/','/',  ]:
            request.session['url_path'] = path
            # print(path+'haha')
        # else:
        #     request.session['url_path'] = '/user/login/'





提供的六个函数如下:

  • 1.初始化:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件
def __init__():
    pass
  • 2.处理请求前:在每个请求上调用,返回None或HttpResponse对象
def process_request(request):
    pass
  • 3.处理视图前:在每个请求上调用,返回None或HttpResponse对象
def process_view(request, view_func, view_args, view_kwargs):
    pass
  • 4.处理模板响应前:在每个请求上调用,返回实现了render方法的响应对象
def process_template_response(request, response):
    pass
  • 5.处理响应后:所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象
def process_response(request, response):
    pass
  • 6.异常处理:当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象
def process_exception(request,exception):
    pass
  • 以上描述了六个方法的一次请求响应过程中的阶段




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值