python - django中间件错误

标签 python django django-middleware

我试图在中间件(在 threading.local 中设置变量)和 dbrouter(根据 threading.local 中设置的变量设置数据库)的帮助下动态选择数据库。

代码如下:

import re
import threading 
request_cfg = threading.local()

class RouterMiddleware(object):
    def process_view( self, request, view_func, view_args, view_kwargs ):
        pattern = re.compile("\\b(http://|https://|www.|.com|8000|:|//)\\W\\d+", re.I)
        words = request.get_host()        
        db_name = [pattern.sub("", words)][0].split('.')[0]
        request_cfg.cfg = db_name
        return None

    def process_response( self, request, response ):
        if hasattr( request_cfg, 'cfg' ):
            del request_cfg.cfg
        return response


class DatabaseRouter (object):
    def _default_db( self ):
        if hasattr( request_cfg, 'cfg' ):
            return request_cfg.cfg
        else:
            return 'default'

    def db_for_read( self, model, **hints ):
        return self._default_db()

    def db_for_write( self, model, **hints ):
        return self._default_db()

我的中间件类列表如下:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'subdomains.middleware.SubdomainURLRoutingMiddleware', 
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'oscar.apps.basket.middleware.BasketMiddleware',
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
    'catalogue.middleware.RouterMiddleware',
)

但是中间件有问题。即使在登录(请求,用户)之后,用户也没有在请求中设置,即用户仍然是匿名用户。

删除中间件解决了我的问题,即用户在请求中被设置。

希望中间件有问题,但我不知道是什么问题!请告诉我这段代码有什么问题。谢谢。

最佳答案

只需使用 post_request,更明确地说,删除

def process_view( self, request, view_func, view_args, view_kwargs ):
##

def process_request(self, request):
##

这样就可以了。

关于python - django中间件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27438498/

相关文章:

python - 如何使 Python 字符串包含 unicode 代码点?

python - 将 scipy 稀疏行矩阵添加到另一个稀疏矩阵

python - Django 可重用应用程序和迁移

python - Django 如何保证中间件的 __init__ 只被调用一次?

python - 内联评估输入函数,以便将输入或占位符附加到列表中

django - 运行 Django 管理命令 - 由站点访问者触发

python - celery 节拍 : ACCESS_REFUSED - Login was refused using authentication mechanism AMQPLAIN

Django-运行时数据库切换

python - 从 Django 1.3 升级到 1.9 时,“WSGIRequest”对象没有属性 'session'

python - 如何在 setup.py 中包含可执行文件