标签: django-middleware

为什么Django的每站点缓存中间件不能为我工作?

我正在使用Django 1.3 beta 1并设置memcached.我对settings.py每个Django的指令进行了更改:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
    #'debug_toolbar.middleware.DebugToolbarMiddleware',
)
CACHE_MIDDLEWARE_SECONDS = 100000
CACHE_MIDDLEWARE_KEY_PREFIX = 'site_cache'
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试的测试视图功能:

def home(request):

    print 'uncached'

    # ...View's code...
Run Code Online (Sandbox Code Playgroud)

我总是uncached打印在开发服务器的输出上,我总是得到数据库的命中.为什么?我是否遗漏了某些内容或者完全误解了缓存?

编辑#1:

模板片段缓存工作完全正常.我只是错过了一些东西吗?请帮忙.

python django memcached django-middleware django-cache

5
推荐指数
1
解决办法
1569
查看次数

Django 1.10和中间件

再一次:Django 1.10.

新的中间件风格.在我们的文档中:

https://docs.djangoproject.com/en/1.10/releases/1.10/#new-style-middleware

https://docs.djangoproject.com/en/1.10/topics/http/middleware/#upgrading-pre-django-1-10-style-middleware

我需要Django调试工具栏.1.5版与Django 1.10兼容.

这是安装文档:https://django-debug-toolbar.readthedocs.io/en/stable/installation.html

Django调试工具栏需要:

MIDDLEWARE_CLASSES = [
    # ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    # ...
] 
Run Code Online (Sandbox Code Playgroud)

好吧,我试图将'debug_toolbar.middleware.DebugToolbarMiddleware'添加到现有的MIDDLEWARE.没有成功(服务器不运行,一些异常上升).

然后我将MIDDLEWARE重命名为MIDDLEWARE_CLASSES.工作.

困扰我的是:我在文档中找不到支持MIDDLEWARE_CLASSES的内容.一切正常.

你能给我一些建议:是否可以使用MIDDLEWARE_CLASSES设置?在哪里阅读这个.

django-middleware

5
推荐指数
1
解决办法
1621
查看次数

在不使用Django本身的情况下测试自定义Django中间件

我已经用1.10样式编写了自定义Django中间件的代码,类似于:

class MyMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response
        # some initialization stuff here

    def __call__(self, request):
        # Code executed before view functions are called. 
        # Purpose of this middeware is to add new attribute to request

        # In brief:
        request.new_attribute = some_function_returning_some_object()
        response = self.get_response(request)

        # Code to be executed for each request/response after
        # the view is called.

        return response
Run Code Online (Sandbox Code Playgroud)

请注意,该中间件正受到威胁,因为它是一个单独的Python模块,不属于我的项目中的任何特定应用程序,而是驻留在外部,并像其他任何软件包一样通过pip安装。它本身不起作用,只有安装在Django应用中才起作用。

它工作正常,但是,我想对其进行测试。到目前为止,我所做的是这样的my_tests.py

from my_middleware_module import MyMiddleware
# some @patches
def test_mymiddleware():
    request = Mock() …
Run Code Online (Sandbox Code Playgroud)

python testing django django-middleware django-1.10

5
推荐指数
1
解决办法
2700
查看次数

在身份验证中间件之后调用自定义中间件

在django REST框架中,身份验证中间件仅在执行视图中间件之后才在请求中设置用户对象,而在此之前执行任何自定义中间件。是否有某种方法可以更改此顺序并在通过身份验证中间件设置用户对象之后执行自定义中间件

作为替代方案,我在中间件本身中创建了用户对象,它可以正常工作,但这只是一个hack。

common.py中定义的中间件是:

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'application.middlewares.IPsBlockerMiddlewareHook',
    'application.middlewares.UserMiddleware',
]
Run Code Online (Sandbox Code Playgroud)

有问题的自定义中间件是UserMiddleware。我需要在身份验证后执行它,但事实并非如此

django django-middleware django-rest-framework

5
推荐指数
1
解决办法
287
查看次数

如何更改 Django 网站中特定页面的语言

Django 国际化允许我在设置文件(站点范围)或每个用户/每个会话的基础上设置语言代码。

如何更改特定页面的语言?

我写了一个中间件,它按照我希望的翻译方式设置 request.LANGUAGE_CODE,但似乎没有使用此属性来进行选定的翻译。

django locale django-middleware internationalization

4
推荐指数
1
解决办法
1322
查看次数

Django:错误:NotperlyConfigured模块没有定义""类

配置不当:中间件模块"报告"未定义"ReportMiddleware"类

但是我已经定义了这个,但可能在错误的位置定义了,那么我应该在哪里放置这个类文件?

django django-middleware

4
推荐指数
1
解决办法
2088
查看次数

将中间件放入django是多么昂贵

我写的是一个非常简单的应用程序.

  1. 要登录该应用的Facebook画布用户
  2. 要进行一些访问者跟踪,大多数代码都非常简单.

该应用程序可能并不复杂,非常接近博客系统.但是,我想知道我的中间件架构在资源方面会有多么昂贵.

特别令我担心的一件事是,每次发出唯一请求时都会创建一个新的访问者对象.这是一个好主意吗 ?

因此,虽然中间件是一个令人惊叹的DRY和敏捷概念,但它们在性能方面的表现如何.

谢谢

architecture django web-applications django-middleware

4
推荐指数
1
解决办法
426
查看次数

要在views.py文件中的所有视图中运行的代码

views.py文件中的所有视图运行一些代码的最佳方法是什么?

我来自PHP背景,我通常将它放在构造函数/索引位中,以便它始终运行所请求的任何页面.它必须特定于那个views.py文件,但我想检查用户是否可以访问"这个应用程序/模块"并且想要避免在可能的情况下在所有视图上使用装饰器?

django django-middleware django-views

4
推荐指数
1
解决办法
719
查看次数

如何仅为django中的某些路径定义中间件?

无论如何要为django中的特定路由或路由组定义中间件?就像 laravel 一样,我们可以这样定义它:

Route::get('admin/profile', function () {})->middleware('auth');

django django-middleware django-rest-framework

4
推荐指数
1
解决办法
2853
查看次数

如何在除单个路径之外的所有地方应用 Django 中间件?

我正在使用 Python 3.9 和 Django 3。我已经定义了这个中间件......

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'directory.middleware.extend_token_response.ExtendTokenResponse'
]
Run Code Online (Sandbox Code Playgroud)

但是,我不希望中间件应用于某个特定的 URL。我在中间件中对此进行了硬编码,如下所示

class ExtendTokenResponse:
    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

    def __call__(self, request):
        response = self.get_response(request)
        if request.path != '/' + LOGOUT_PATH:
            # Code to be executed for each request before
            # the view (and later middleware) are called.
            is_expired = True
            try:
                token = request.auth
                print("req path: %s" % request.path)
                is_expired = is_token_expired(token) if token …
Run Code Online (Sandbox Code Playgroud)

django django-middleware python-3.x

4
推荐指数
1
解决办法
2166
查看次数