Django税率限制
我正在使用Django ratelimiting 在dev中,一切正常 然而,在prod中,当使用虚拟环境时,它根本不起作用。要么是利率限制(即观点)没有在应该的时候生效,要么就是根本没有生效。 这两种环境之间的主要区别是我的设置文件被拆分。i、 eDjango税率限制,django,Django,我正在使用Django ratelimiting 在dev中,一切正常 然而,在prod中,当使用虚拟环境时,它根本不起作用。要么是利率限制(即观点)没有在应该的时候生效,要么就是根本没有生效。 这两种环境之间的主要区别是我的设置文件被拆分。i、 e webtools_django15/ |-- __init__.py |-- myapp | |-- __init__.py | |-- __init__.pyc | |-- myapp.wsgi | |-- myapp_setti
webtools_django15/
|-- __init__.py
|-- myapp
| |-- __init__.py
| |-- __init__.pyc
| |-- myapp.wsgi
| |-- myapp_settings.py
| |-- myapp_settings.pyc
| |-- myapp_urls.py
| |-- forms.py
| |-- forms.pyc
| |-- models.py
| |-- tests.py
| |-- views.py
| |-- views.py-bak
| `-- views.pyc
|-- manage.py
|-- modules
| |-- __init__.py
| `-- dnslookup.py
|-- static
| ! omitted !
|-- templates
| ! omitted !
`-- webtools_django15
|-- __init__.py
|-- __init__.pyc
|-- settings.py
|-- settings.py-bak
|-- settings.pyc
`-- urls.py
查看
@ratelimit(rate="5/s", method="POST", block=True)
@ratelimit(ip=True, rate="3/s", method="POST", block=True)
def report_ajax(request):
....
MYAPP.SETTINGS.PY
from settings import *
DEBUG = True
TEMPLATE_DEBUG = DEBUG
SITE_ID = 1
ROOT_URLCONF = 'myapp.myapp_urls'
TEMPLATE_DIRS = (
"/opt/django/webtools_django15/templates"
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'widget_tweaks',
'bootstrapform',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
)
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
)
MANAGERS = ADMINS
DATABASES = {
'default': {
}
}
LOGIN_URL = '/login/'
TIME_ZONE = 'Europe/London'
LANGUAGE_CODE = 'en-us'
SITE_ID = 1
USE_I18N = True
USE_L10N = True
MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = ''
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/static/admin/'
STATICFILES_DIRS = (
'/opt/django/webtools_django15/static/',
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
RATELIMIT_ENABLE = True
RATELIMIT_VIEW = "myapp.views.ratelimited"
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
MIDDLEWARE_CLASSES = (
'ratelimit.middleware.RatelimitMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
设置.PY
from settings import *
DEBUG = True
TEMPLATE_DEBUG = DEBUG
SITE_ID = 1
ROOT_URLCONF = 'myapp.myapp_urls'
TEMPLATE_DIRS = (
"/opt/django/webtools_django15/templates"
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'widget_tweaks',
'bootstrapform',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
)
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
)
MANAGERS = ADMINS
DATABASES = {
'default': {
}
}
LOGIN_URL = '/login/'
TIME_ZONE = 'Europe/London'
LANGUAGE_CODE = 'en-us'
SITE_ID = 1
USE_I18N = True
USE_L10N = True
MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = ''
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/static/admin/'
STATICFILES_DIRS = (
'/opt/django/webtools_django15/static/',
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
RATELIMIT_ENABLE = True
RATELIMIT_VIEW = "myapp.views.ratelimited"
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
MIDDLEWARE_CLASSES = (
'ratelimit.middleware.RatelimitMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
有什么想法吗???看起来这个应用程序使用您配置的
缓存来保存速率限制用户的计数。我猜您的缓存环境在开发和生产之间存在差异
您的设置没有提到任何缓存配置,因此您可能继承了,这是一个本地内存缓存
当您在生产环境(如apache)或wsgi容器(如unicorn或uwsgi)中运行时,它们会并行生成多个进程来处理服务器请求。I这些进程之间不共享本地内存缓存,因此无法正确跟踪您的计数
切换到memcache或redis之类的缓存,使这些计数在您的请求进程之间保持不变。此应用程序似乎使用您配置的缓存
来保持速率限制用户的计数。我猜您的缓存环境在开发和生产之间存在差异
您的设置没有提到任何缓存配置,因此您可能继承了,这是一个本地内存缓存
当您在生产环境(如apache)或wsgi容器(如unicorn或uwsgi)中运行时,它们会并行生成多个进程来处理服务器请求。I这些进程之间不共享本地内存缓存,因此无法正确跟踪您的计数
切换到memcache或redis之类的缓存,以使这些计数在您的请求和进程之间保持持久。不确定其相关性,但您的生产环境是什么?Apache、wsgi、nginx、gunicorn等?Apache、wgsi守护进程和虚拟环境……不确定它们的相关性,但您的生产环境是什么?Apache、wsgi、nginx、gunicorn等?Apache、wgsi守护进程和虚拟环境……谢谢,我最终使用了一个简单的django数据库作为缓存,它起到了很好的作用。在这里可以找到:这会起作用,但会使您的速度减慢一点,因为您在每次请求(更新计数)时都在读写SQL数据库。我假设您使用的是速率限制,因为您正试图防止您的客户端使您的系统过载,所以请记住,其他缓存(如memcache或redis)会快得多。好的,谢谢,这是一个非常小的站点(www.dnsdonkey.co.uk),更多的是一个项目,因此应该是一个太大的问题……谢谢,最后,我使用了一个简单的django数据库作为缓存,效果很好。在这里可以找到:这会起作用,但会使您的速度减慢一点,因为您在每次请求(更新计数)时都在读写SQL数据库。我假设您使用的是速率限制,因为您正试图防止您的客户端使您的系统过载,所以请记住,其他缓存(如memcache或redis)会快得多。好的,谢谢,这是一个非常小的站点(www.dnsdonkey.co.uk),更多的是一个项目,因此应该是一个太大的问题。。。。