目录
signals. 1
middleware. 2
i18n. 2
signals
Django定义了一系列信号,代码中可监听信号,收到信号后可触发一系列动作;
内置信号:
from django.db.models.signals import pre_save, post_save, \ #保存前、保存后
pre_delete, post_delete, \ #删除前、删除后
m2m_changed #多对多
from django.core.signals import request_started, request_finished #请求开始、请求结束
mysite/books/signals.py
def my_callback(sender, **kwargs): #方式1
print('request finished')
request_finished.connect(my_callback)
@receiver(pre_save, sender=Publisher) #方式2
def my_handler(sender, **kwargs):
print('do sth action')
mysite/books/apps.py
class BooksConfig(AppConfig):
name = 'books'
def ready(self):
from . import signals
输出:
>>> p = Publisher.objects.create(name='jowin',address='jowin',city='jowin',state_province='jowin',country='cn',website='test')
do sth action
[15/Jan/2019 14:11:27] "GET /favicon.ico HTTP/1.1" 404 2174
request finished
request finished
middleware
mysite/mysite/middlewares.py
import os
from django.http import HttpResponse
class DemoMiddleware:
IN_DEMO_MODE = os.environ.get('DEMO_MODE', False)
SAFE_METHOD = ('GET', 'HEAD')
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if request.method not in self.SAFE_METHOD:
return HttpResponse('in demo mode, only safe method only')
return self.get_response(request)
mysite/mysite/settings.py
MIDDLEWARE = [
'mysite.middlewares.DemoMiddleware',
i18n
mysite/mysite/settings.py
LANGUAGE_CODE = 'zh-CN'
LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')] #建mysite/locale/zh路径,不是py包
mysite/books/views.py
from django.utils.translation import ugettext as _
return HttpResponse(_('add successed'))
(webproject) C:\webproject\mysite>python manage.py makemessages #生成翻译文件
mysite/locale/zh/LC_MESSAGES/django.po #编写翻译
#: .\books\views.py:49
msgid "add successed"
msgstr "fuck,你妹"
(webproject) C:\webproject\mysite>python manage.py compilemessages #编译翻译文件
mysite/books/templates/books_add.html #模板中使用
{% load i18n %}
{% trans "add successed" %}
settings
ALLOWED_HOSTS = [] #在其它主机上部署,通过网络访问;DEBUG = False同时设置ALLOWED_HOSTS = ['*']
APPEND_SLASH = True #在请求的路径上自动加上/
CACHES = #使用的缓存,redis|memcached,默认用内存
DATABASES = [] #默认sqlite
DEBUG = True #默认开启,开发时自动reload,静态文件django提供serve
EMAIL_HOST
FIXTURE_DIRS = [os.path.join(BASE_DIR,’fixture’)] #DB初始化时提供数据
INSTALLED_APPS = [] #
LOGING =
MIDDLEWARE_CLASSES = []
SECRET_KEY = #项目中所有用到的加密都要此字串,如session
TEMPLATES = [] #
LOGIN_URL =
MEDIA_ROOT =
MEDIA_URL = #与用户上传文件有关
AUTH_USER_MODEL = “accounts/login” #auth相关,AUTH_USER_MODEL = 'users.UserProfile'用自定义的模型
LOGIN_REDIRECT_URL = “/”
AUTHENTICATION_BACKENDS = [‘django.contrib.auth.backends.ModelBackend’] #插件,用于扩展,可用其它认证方式
LOGOUT_REDIRECT_URL = None
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None #session在指定域名下生效
SESSION_COOKIE_PATH = “/” #session生效的路径,大项目用不同的路径区分
SESSION_COOKIE_NAME = “sessionid”
SESSION_ENGINE = “django.contrib.sessions.backends.db” #可设为redis|memcached或文件,默认db
SESSION_EXPIRE_AT_BROWSER_CLOSE = False #用户browser关闭时,session过期
SESSION_FILE_PATH = None
STATIC_ROOT = “/var/www/html/example.com/static” #静态文件在nginx的路径
STATIC_URL = “/static/” #访问静态文件用到的url前缀
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),] #python manage.py collectstatic将此路径下的静态文件复制一份到STATIC_ROOT下;django仅在开发模式下能对外提供静态文件,DEBUG=False不再对外提供静态文件,需要用collectstatic命令来收集静态文件并交由其它静态文件服务器来提供
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
# USE_TZ = True #使用国际时间
USE_TZ = False #使用本地时间
转载于:https://blog.51cto.com/jowin/2394794