目录

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',

 

1.jpg

 

 

 

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   #使用本地时间