【问题标题】:Custom Middleware get_response not working自定义中间件 get_response 不起作用
【发布时间】:2017-08-19 11:10:23
【问题描述】:

我想要实现的是,如果子域(租户)已注册,那么它应该显示一个不同的页面,否则正常执行。

我只是想用自定义中间件运行 django。到目前为止,get_response 在显示主页时返回 500 状态。

下面的异常返回'NoneType' object is not callable

如果用户是普通用户而不是租户,我希望应用程序正常运行。

我刚刚开始,但我想 get_response 函数是显示其他中间件执行的响应稍后会导致 500 状态。

任何帮助想弄清楚,我如何使用我的自定义中间件表示赞赏。

class TenantMiddleware(MiddlewareMixin):
    def process_request(self, request):

        absolute_url = request.get_full_path()
        url = urlparse.urlparse(absolute_url)
        print absolute_url
        print url

        subdomain = url.hostname.split(".") if url.hostname else None
        if subdomain and subdomain != 'affectlab' :
            if 'subdomain' not in request.session:
                print "I am here"
                tenant=map(lambda x : x[0],(list(profiles.models.Tenant.objects.filter(name=subdomain).values_list('id'))))
                if tenant:
                    request.session['tenant'] = int(tenant[0])
                    request.session['subdomain'] = subdomain.strip()
                    return HttpResponseRedirect("/login/")

                else:
                    response = render_to_response('404.html', {},context_instance=RequestContext(request))
                    response.status_code = 404
                    return response
            else:
                if request.session['subdomain'] == subdomain:
                    return self.get_response(request)
                else:

                    tenant = map(lambda x: x[0],(list(profiles.models.Tenant.objects.filter(name=subdomain)).values_list('id')))
                    if tenant:
                        request.session['tenant'] = int(tenant[0])
                        request.session['subdomain'] = subdomain.strip()
                        response = logout(request)  # ,next_page=reverse("/"))
                        return HttpResponseRedirect("/login/")
                    else:
                        response = render_to_response('404.html', {}, context_instance=RequestContext(request))
                        response.status_code = 404
                        return response
        else:
            try :

                response = self.get_response(request)
            except Exception as e:
                print e.message
            return response

【问题讨论】:

    标签: django


    【解决方案1】:

    由于我使用的是 Django1.10,看来我必须在设置文件中使用 MIDDLEWARE 而不是 MIDDLEWARE_CLASSES。

    只需要使用中间件。

    我们也可以这样写。

    class TenantMiddleware(object):
    
        def __init__(self,get_response):
            self.get_response = get_response    
    
        def __call__(self, request):
    
            absolute_url = request.get_full_path()
            url = urlparse.urlparse(absolute_url)
            print absolute_url
            print url
    
            subdomain = url.hostname.split(".") if url.hostname else None
            if subdomain and subdomain != 'affectlab' :
                if 'subdomain' not in request.session:
                    print "I am here"
                    tenant=map(lambda x : x[0],(list(profiles.models.Tenant.objects.filter(name=subdomain).values_list('id'))))
                    if tenant:
                        request.session['tenant'] = int(tenant[0])
                        request.session['subdomain'] = subdomain.strip()
                        return HttpResponseRedirect("/login/")
    
                    else:
                        response = render_to_response('404.html', {},context_instance=RequestContext(request))
                        response.status_code = 404
                        return response
                else:
                    if request.session['subdomain'] == subdomain:
                        return self.get_response(request)
                    else:
    
                        tenant = map(lambda x: x[0],(list(profiles.models.Tenant.objects.filter(name=subdomain)).values_list('id')))
                        if tenant:
                            request.session['tenant'] = int(tenant[0])
                            request.session['subdomain'] = subdomain.strip()
                            response = logout(request)  # ,next_page=reverse("/"))
                            return HttpResponseRedirect("/login/")
                        else:
                            response = render_to_response('404.html', {}, context_instance=RequestContext(request))
                            response.status_code = 404
                            return response
            else:
                try :
    
                    response = self.get_response(request)
                except Exception as e:
                    print e.message1
                return response
    

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 2021-07-24
      • 1970-01-01
      • 2014-03-07
      • 2017-11-09
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多