Django-settings.py的默认设定与工作原理 2025-02-04 Python 暂无评论 19 次阅读 #STATIC_ROOT和STATIC_URL ``` STATIC主要指的是如css,js,images这样文件,在settings里面可以配置STATIC_ROOT和STATIC_URL, #STATIC文件一般保存在以下位置: #1、STATIC_ROOT:在settings里面设置,一般用来放一些公共的js,css,images等。 #2、app的static文件夹,在每个app所在文夹均可以建立一个static文件夹,然后当运行collectstatic时, # Django会遍历INSTALL_APPS里面所有app的static文件夹,将里面所有的文件复制到STATIC_ROOT。因此, # 如果你要建立可复用的app,那么你要将该app所需要的静态文件放在static文件夹中。 # 也就是说一个项目引用了很多app,那么这个项目所需要的css,images等静态文件是分散在各个app的static文件的,比 # 较典型的是admin应用。当你要发布时,需要将这些分散的static文件收集到一个地方就是STATIC_ROOT。 #3、STATIC文件还可以配置STATICFILES_DIRS,指定额外的静态文件存储位置。 # STATIC_URL的含义与MEDIA_URL类似。 # ---------------------------------------------------------------------------- #注意1: #为了后端的更改不会影响前端的引入,避免造成前端大量修改 STATIC_URL = '/static/' #引用名 STATICFILES_DIRS = ( os.path.join(BASE_DIR,"statics") #实际名 ,即实际文件夹的名字 ) #django对引用名和实际名进行映射,引用时,只能按照引用名来,不能按实际名去找 # #------error-----不能直接用,必须用STATIC_URL = '/static/': # #注意2(statics文件夹写在不同的app下,静态文件的调用): STATIC_URL = '/static/' STATICFILES_DIRS=( ('hello',os.path.join(BASE_DIR,"app01","statics")) , ) # #注意3: STATIC_URL = '/static/' {% load staticfiles %} # ``` #MEDIA_ROOT和MEDIA_URL ``` # media一般为用户上传的文件 # 在settings中加入 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # ‘media’ 为你定义的文件名 # 在setting.py中的TEMPLATES中的OPTIONS中的context_processors中添加: django.template.context_processors.media #用于前端识别MEDIA_URL # 然后urls.py添加 (django2.x) from django.views.static import serve from django.conf import settings re_path(r'^media/(?P.*)$', serve, {'document_root': settings.MEDIA_ROOT}), ``` #BASE_DIR 默认值`os.path.dirname(os.path.dirname(os.path.abspath(__file__)))`。这个是Django项目文件夹所在目录得绝对路径,一般不要修改。 #DEBUG 默认值是True。在本地开发测试环境下设置DEBUG=True可以显示bug信息,便于开发者找出代码错误所在。当你在部署项目在生产环境时,请切记设置DEBUG=False。因为生成环境下打开Debug会暴露很多敏感设置信息(比如数据库密码)。注意: 当你设置DEBUG=False, 你一定要设置ALLOWED_HOSTS选项, 否则会抛出异常。 #ALLOWED_HOSTS 默认值为空[]。设置ALLOWED_HOSTS是为了限定用户请求中的host值,以防止黑客构造包来进行头部攻击。该选项正确设置方式如下: ``` DEBUG=True: ALLOWED_HOSTS可以为空,也可设置为['127.0.0.01', 'localhost'] DEBUG=False: ALLOWED_HOSTS=['46.124.78.xx', 'www.bat.com','127.0.0.1'] ``` 当你关闭DEBUG时,HOST一般为服务器公网IP或者注册域名。 当你还需要使用子域名时,你可以用'`.bat.com`'。它将匹配`bat.com`,`www.bat.com`和`news.bat.com`。在正式部署项目时,请尽量不要设置`ALLOWED_HOSTS=['*']`。 #SECRET_KEY SECRET_KEY是Django根据自己算法生成的一大串随机数,本质是个加密盐,用于防止CSRF(Cross-site request forgery)跨站请求伪造攻击。当部署Django项目到生产环境中时,Django文档建议不直接在settings.py里输入字符串,而是采取下面两种方法读取SECRET_KEY。 ``` # 方法一: 从环境变量中读取SECRET_KEY import os SECRET_KEY = os.environ['SECRET_KEY'] # 方法二: 从服务器上Django项目文件价外的某个文件读取 with open('/etc/secret_key.txt') as f: SECRET_KEY = f.read().strip() ``` #INSTALLED_APPS 这个设置比较简单,也比较常用,用于增删一个项目(Project)所包含的应用(APP)。只有对列入此项的APP, Django才会生成相应的数据表。 ``` INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'polls', # 自定义的APP ] ``` #AUTH_USER_MODEL 默认为auth.user。当你自定义auth模型时需要添加如下配置。 ``` # auth认证默认使用的表 app名+表名 AUTH_USER_MODEL = 'blog.User' ``` #国际化(语言与时间) ``` TIME_ZONE = 'Asia/Shanghai' # 设置时区 USE_I18N = True # 默认为True,是否启用自动翻译系统 USE_L10N = True # 默认False,以本地化格式显示数字和时间 USE_TZ = False # 默认值True。若使用了本地时间,必须设为False ``` #邮箱服务配置 ``` EMAIL_HOST = 'smtp.qq.com' # 发送者邮箱服务器 EMAIL_PORT = 25 # 端口 EMAIL_HOST_USER = '' # 发送者用户名(邮箱地址) EMAIL_HOST_PASSWORD = '' # 发送者密码 EMAIL_USE_SSL = True DEFAULT_FROM_EMAIL = 'xxx@qq.com' ``` #数据库设置 Django默认使用的数据库为sqllite,如果想要换为mysql,需将settings.py中的DATABASES配置更换为下面的代码,并在项目名目录下的init.py写上 import pymysql pymysql.install_as_MySQLdb() ``` DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'mydb', # 你要存储数据的库名,事先要创建之 'USER': 'xxs', # 数据库用户名 'PASSWORD': 'xxxx', # 密码 'HOST': 'localhost', # 主机 'PORT': '3306', # 数据库使用的端口 } } ``` #中间件 ``` MIDDLEWARE = [ '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', ] ``` #COOKIE与SESSION设置 ``` SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认) SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key, SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认) SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认) SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认) SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认) SESSION_COOKIE_AGE = 60 * 30 # Session的cookie失效日期(30min)(默认) SESSION_EXPIRE_AT_BROWSER_CLOSE = True # 是否关闭浏览器使得Session过期(默认) SESSION_SAVE_EVERY_REQUEST = True # 是否每次请求都保存Session,默认修改之后才保存 ``` #缓存设置(CACHE) Memcached缓存 Memcached是基于内存的缓存,Django原生支持的最快最有效的缓存系统。对于大多数场景,我们推荐使用Memcached,数据缓存在服务器端。使用前需要通过pip安装memcached的插件python-memcached和pylibmc,可以同时支持多个服务器上面的memcached。 下面是使用pyhon-memcached的设置。 ``` # localhost CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } } # unix soket CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'unix:/tmp/memcached.sock', } } CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ '172.19.26.240:11211', '172.19.26.242:11211', ] # 我们也可以给缓存机器加权重,权重高的承担更多的请求,如下 'LOCATION': [ ('172.19.26.240:11211',5), ('172.19.26.242:11211',1), ] } } ``` 数据库缓存 ``` CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table', } ``` 文件系统缓存 ``` CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table', } ``` 本地内存缓存 ``` CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table', } ``` 转自https://www.cnblogs.com/xiaoxia02/articles/10458167.html 如果不想每次在模版中加载静态文件都使用 load 加载 static标签,那么可以在 settings.py中的TEMPLATES/OPTIONS添加 `'builtins':['django.templatetags.static']`,这样以后在模版中就可以直接使用static标签,而不用手动的load了。 ``` TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], # 这里加载 'builtins':['django.templatetags.static'] }, }, ] ``` 原文链接:https://blog.csdn.net/Simo2024/article/details/138664666 标签: django 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。