我正在使用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打印在开发服务器的输出上,我总是得到数据库的命中.为什么?我是否遗漏了某些内容或者完全误解了缓存?
模板片段缓存工作完全正常.我只是错过了一些东西吗?请帮忙.
再一次:Django 1.10.
新的中间件风格.在我们的文档中:
https://docs.djangoproject.com/en/1.10/releases/1.10/#new-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设置?在哪里阅读这个.
我已经用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) 在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 国际化允许我在设置文件(站点范围)或每个用户/每个会话的基础上设置语言代码。
如何更改特定页面的语言?
我写了一个中间件,它按照我希望的翻译方式设置 request.LANGUAGE_CODE,但似乎没有使用此属性来进行选定的翻译。
配置不当:中间件模块"报告"未定义"ReportMiddleware"类
但是我已经定义了这个,但可能在错误的位置定义了,那么我应该在哪里放置这个类文件?
我写的是一个非常简单的应用程序.
该应用程序可能并不复杂,非常接近博客系统.但是,我想知道我的中间件架构在资源方面会有多么昂贵.
特别令我担心的一件事是,每次发出唯一请求时都会创建一个新的访问者对象.这是一个好主意吗 ?
因此,虽然中间件是一个令人惊叹的DRY和敏捷概念,但它们在性能方面的表现如何.
谢谢
为views.py文件中的所有视图运行一些代码的最佳方法是什么?
我来自PHP背景,我通常将它放在构造函数/索引位中,以便它始终运行所请求的任何页面.它必须特定于那个views.py文件,但我想检查用户是否可以访问"这个应用程序/模块"并且想要避免在可能的情况下在所有视图上使用装饰器?
无论如何要为django中的特定路由或路由组定义中间件?就像 laravel 一样,我们可以这样定义它:
Route::get('admin/profile', function () {})->middleware('auth');
我正在使用 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 ×9
python ×2
architecture ×1
django-1.10 ×1
django-cache ×1
django-views ×1
locale ×1
memcached ×1
python-3.x ×1
testing ×1