









from django.utils.translation import gettext_lazy as _
# 系统支持的语言种类
LANGUAGES = [
('zh-hans', _('Chinese')),
('en', _('English')),
]
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# 多语言文件路径
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
'django.contrib.sessions.middleware.SessionMiddleware', # 它之后
'django.middleware.locale.LocaleMiddleware', # 加这个
'django.middleware.cache.UpdateCacheMiddleware', # 它之前
<form action="{% url 'set_language' %}" method="post" > ... </form>
其中set_language是在i18n路由中提供的
<input type="hidden" name="csrfmiddlewaretoken" value="Lw0GbBUXucFQNnPkdLCnfrirdY3UqvdfLwZPH00DNEU9Iu9nYyvcIYQH4FY6C1qF">
def _unmask_cipher_token(token):
""" 官方解析64位csrfmiddlewaretoken源码
Given a token (assumed to be a string of CSRF_ALLOWED_CHARS, of length
CSRF_TOKEN_LENGTH, and that its first half is a mask), use it to decrypt
the second half to produce the original secret.
"""
mask = token[:CSRF_SECRET_LENGTH]
token = token[CSRF_SECRET_LENGTH:]
chars = CSRF_ALLOWED_CHARS
pairs = zip((chars.index(x) for x in token), (chars.index(x) for x in mask))
return "".join(chars[x - y] for x, y in pairs) # Note negative values are ok
# 使用函数的方式
def performance_logger_middleware(get_response):
def middleware(request):
start_time = time.time()
response = get_response(request) # 在get_response前后处理
duration = time.time() - start_time
response["X-Page-Duration-ms"] = int(duration * 1000)
logger.info("%s %s %s", duration, request.path, request.GET.dict() )
return response
return middleware
# 使用类的方式
# 还可以通过继承from django.utils.deprecation import MiddlewareMixin,然后实现process_request, process_response等方法
class PerformanceAndExceptionLoggerMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
start_time = time.time()
response = self.get_response(request)
duration = time.time() - start_time
response["X-Page-Duration-ms"] = int(duration * 1000)
logger.info("duration:%s url:%s parameters:%s", duration, request.path, request.GET.dict() )
# Code to be executed for each request/response after
# the view is called.
return response
def process_exception(self, request, exception):
if exception:
message = "url:{url} ** msg:{error} ````{tb}````".format(
url = request.build_absolute_uri(),
error = repr(exception),
tb = traceback.format_exc()
)
logger.warning(message)
# send dingtalk message
dingtalk.send(message)
# capture exception to sentry:
capture_exception(exception)
return HttpResponse("Error processing the request, please contact the system administrator.", status=500)
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://192.168.139.133:6379/0",
'TIMEOUT': 60, # default expire time per api call
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"SOCKET_CONNECT_TIMEOUT": 5, # in seconds
"SOCKET_TIMEOUT": 5, # r/w timeout in seconds
'MAX_ENTRIES': 10000,
'KEY_PREFIX': 'recruit-',
# "PASSWORD": "mysecret",
}
}
}
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.cache.UpdateCacheMiddleware', # 更新缓存
'django.middleware.common.CommonMiddleware', # 放在这个的前后
'django.middleware.cache.FetchFromCacheMiddleware', # 从缓存获取
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
CELERY_BROKER_URL = 'redis://192.168.139.133:6379/8'
CELERY_RESULT_BACKEND = 'redis://192.168.139.133:6379/1'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Shanghai'
# 一个发送简单邮件的示例
'''
# django中邮件相关参数配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = 'xxx@163.com'
EMAIL_HOST_PASSWORD = 'xxx'
DEFAULT_FROM_EMAIL = 'xxx@163.com'
'''
from celery import shared_task
from django.core.mail import send_mail
@shared_task
def send_email(email_to, subject, message, from_email=None):
send_mail(subject, message, from_email, email_to, fail_silently=False)
celery -A 应用名称 worker -l info -P gevent
INSTALLED_APPS = [
...,
'django_celery_beat',
]
from celery import shared_task
@shared_task
def schedule_test(msg):
print(msg)
app = Celery('wqb_dj')
# 在配置中添加
app.conf.beat_schedule = {
'add-every-10-seconds': {
'task': 'wqb_dj.tasks.add',
'schedule': 10.0,
'args': (16, 4, )
},
}
app = Celery('wqb_dj')
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
# Calls schedule_test('hello') every 10 seconds.
sender.add_periodic_task(10.0, schedule_test.s('hello'), name='hello every 10')
# Calls test('world') every 30 seconds
sender.add_periodic_task(30.0, schedule_test.s('world'), expires=10)
# Executes every Monday morning at 7:30 a.m.
sender.add_periodic_task(
crontab(hour=19, minute=30, day_of_week=1),
schedule_test.s('Happy Mondays!'),
)
import json
from django_celery_beat.models import PeriodicTask, IntervalSchedule
def func_test_add_schedule_task():
"""动态的增加定时任务"""
# 通过周期任务相关的模型类,在运行时添加
# 先创建定时策略
schedule, created = IntervalSchedule.objects.get_or_create(every=10, period=IntervalSchedule.SECONDS, )
# 再创建任务
msg = time.time()
PeriodicTask.objects.create(interval=schedule, name=f'say welcome {msg}', task='wqb_dj.tasks.schedule_test',
args=json.dumps([f'welcome {msg}']), )
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # 媒体存放目录
MEDIA_URL = '/media/' # 媒体请求路径
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# 阿里云 CDN 存储静态资源文件 & 阿里云存储上传的图片/文件
# STATICFILES_STORAGE = 'django_oss_storage.backends.OssStaticStorage'
DEFAULT_FILE_STORAGE = 'django_oss_storage.backends.OssMediaStorage'
# AliCloud access key ID
OSS_ACCESS_KEY_ID = os.environ.get('OSS_ACCESS_KEY_ID','')
# AliCloud access key secret
OSS_ACCESS_KEY_SECRET = os.environ.get('OSS_ACCESS_KEY_SECRET','')
# The name of the bucket to store files in
OSS_BUCKET_NAME = 'xxx'
# The URL of AliCloud OSS endpoint
# Refer https://www.alibabacloud.com/help/zh/doc-detail/31837.htm for OSS Region & Endpoint
OSS_ENDPOINT = 'oss-cn-beijing.aliyuncs.com'
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。