django中的setting最佳配置小结

django中的setting最佳配置小结,第1张

概述Djangosettings详解1.基础DJANGO_SETTING_MODULE环境变量:让settings模块被包含到python可以找到的目录下,开发情况下不需要,我们通常会在当前文件夹运行,python可以搜索到。如果需要运行在其他服务器上,就必须

Django settings详解

1.基础

DJANGO_SETTING_MODulE环境变量:让settings模块被包含到python可以找到的目录下,开发情况下不需要,我们通常会在当前文件夹运行,python可以搜索到。如果需要运行在其他服务器上,就必须指定DJANGO_SETTINGS_MODulE变量。

2.默认设定

一个django的settings文件不需要我们手动去设置所有项目,因为系统已经默认设置好了。我们只需要修改我们使用的设

定就好了。默认的设置在django/conf/global_settings.py文件中。django在编译时,先载入global_settings.py中的配置,然后加载指定的settings文件,重写改变的设定。

好了,步入正文。

前面的随笔中我们经常会改setting配置也经常将一些配置混淆今天主要是将一些常见的配置做一个汇总。

setting配置汇总

1、app路径

INSTALLED_APPS = [ 'django.contrib.admin','django.contrib.auth','django.contrib.ContentTypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app1.apps.App1Config',# 默认已有 如果没有只要添加app名称即可 例如: 'app1' # 新建的应用都要在这里添加]

2、数据库配置

如果使用django的默认sqlite3数据库则不需要改

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3','name': os.path.join(BASE_DIR,'db.sqlite3'),}}

如果使用MysqL数据库需要将上述数据库注掉修改如下

DATABASES = { 'default': {   'ENGINE': 'django.db.backends.MysqL','name': 'blog',#你的数据库名称 数据库需要自己提前建好 'USER': 'root',#你的数据库用户名 'PASSWORD': '',#你的数据库密码 'HOST': '',#你的数据库主机,留空默认为localhost 'PORT': '3306',#你的数据库端口 }}

并且需要在应用的__init__.py文件添加

import pyMysqLpyMysqL.install_as_MysqLdb()

详情可以查看:https://www.oudahe.com/p/42287/

3、SQL语句

LOGGING = { 'version': 1,'disable_existing_loggers': False,'handlers': { 'console':{  'level':'DEBUG','class':'logging.StreamHandler',},'loggers': { 'django.db.backends': {  'handlers': ['console'],'propagate': True,'level':'DEBUG',}} 

当你的 *** 作与数据库相关时 会将我们的写的语句翻译成SQL语句在服务端打印。

4、静态文件目录

STATIC_URL = '/static/' #调用时目录STATICfileS_Dirs=[ os.path.join(BASE_DIR,"static"),#具体路径]

5、如果数据库中的UserInfo(用户表)继承django内置AbstractUser

1)model需导入

from django.contrib.auth.models import AbstractUser

2)配置文件

AUTH_USER_MODEL = "应用名.UserInfo"

6、中间件

自己写的中间件,例如在项目中的md文件夹下md.py文件中的M1与M2两个中间件

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','md.md.M1','md.md.M2',]

注意自己写的中间件,配置要写在系统中的后面

7、session存储的相关配置

1)数据库配置(默认)

Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。配置 settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认) SESSION_cookie_name = "sessionID"   # Session的cookie保存在浏览器上时的key,即:sessionID=随机字符串(默认) 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 = 1209600    # Session的cookie失效日期(2周)(默认) SESSION_EXPIRE_AT_broWSER_CLOSE = False   # 是否关闭浏览器使得Session过期(默认) SESSION_SAVE_EVERY_REQUEST = False   # 是否每次请求都保存Session,默认修改之后才保存(默认)

2)缓存配置

配置 settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎 SESSION_CACHE_AliAS = 'default'    # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置 SESSION_cookie_name = "sessionID"   # Session的cookie保存在浏览器上时的key,即:sessionID=随机字符串 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 = 1209600    # Session的cookie失效日期(2周) SESSION_EXPIRE_AT_broWSER_CLOSE = False   # 是否关闭浏览器使得Session过期 SESSION_SAVE_EVERY_REQUEST = False   # 是否每次请求都保存Session,默认修改之后才保存

3)默认配置

配置 settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎 SESSION_file_PATH = None     # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()  SESSION_cookie_name = "sessionID"    # Session的cookie保存在浏览器上时的key,即:sessionID=随机字符串 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 = 1209600    # Session的cookie失效日期(2周) SESSION_EXPIRE_AT_broWSER_CLOSE = False   # 是否关闭浏览器使得Session过期 SESSION_SAVE_EVERY_REQUEST = False    # 是否每次请求都保存Session,默认修改之后才保存

注意:

1)也可以自定义配置 但是自定义的配置都要写到配置文件最后 代码中使用时可以导入配置

from django.conf import settingssettings.配置名

2)上面所有配置都是针对特定问题需要修改的 系统默认配置不做说明

3)上面配置只是前面django系列随笔所遇到的常用配置 后续所遇配置都会逐步在此随笔中持续添加跟新

下面看段django settings最佳配置实例代码,具体代码如下所示:

# enCoding=utf-8import osimport socketSITE_ID = 1# 项目的根目录# 简化后面的 *** 作PROJECT_ROOT = os.path.dirname(os.path.dirname(__file__))# 加载应用# 把应用添加到INSTALLED_APPS中from apps.kuser.mysetting import myapp as kuser_appfrom apps.blog.mysetting import myapp as blog_appMY_APPS = blog_app + kuser_app# 加载静态文件from apps.blog.mysetting import my_staticfiles as blog_staticfilesfrom apps.kuser.mysetting import my_staticfiles as kuser_staticfilesMY_STATIC_Dirs = blog_staticfiles + kuser_staticfiles# 加载模板文件from apps.blog.mysetting import my_templates as blog_templatesfrom apps.kuser.mysetting import my_templates as kuser_templatesMY_TEMPLATE_Dirs = blog_templates + kuser_templates# 密钥配置# 适用于开发环境和部署环境# 可以从系统环境中,配置文件中,和硬编码的配置中得到密钥try: SECRET_KEY = os.environ['SECRET_KEY']except: try: with open(os.path.join(PROJECT_ROOT,'db/secret_key').replace('\','/')) as f:  SECRET_KEY = f.read().strip() except: SECRET_KEY = '*lk^6@0l0(iulgar$j)faff&^(^u+qk3j73d18@&+ur^xuTxY'# 得到主机名def hostname(): sys = os.name if sys == 'nt': hostname = os.getenv('computername') return hostname elif sys == 'posix': host = os.popen('echo $HOSTname') try:  hostname = host.read()  return hostname finally:  host.close() else: raise RuntimeError('Unkwon hostname')#调试和模板调试配置#主机名相同则为开发环境,不同则为部署环境#ALLOWED_HOSTS只在调试环境中才能为空if socket.gethostname().lower() == hostname().lower(): DEBUG = TEMPLATE_DEBUG = True ALLOWED_HOSTS = []else: ALLOWED_HOSTS = [ 'baIDu.com','0.0.0.0',] DEBUG = TEMPLATE_DEBUG = False#数据库配置MYDB = { 'MysqL': { 'ENGINE': 'django.db.backends.MysqL','name': 'books',#你的数据库名称 'USER': 'root',#你的数据库端口 },'sqlite': { 'ENGINE': 'django.db.backends.sqlite3','name': os.path.join(PROJECT_ROOT,'db/db.sqlite3').replace('\','/'),}}# 给静态文件url一个后缀,在templates里用到的。# 映射到静态文件的url# STATIC_URL的含义与MEDIA_URL类似STATIC_URL = '/static/'# 总的static目录# 可以使用命令 manage.py collectstatic 自动收集static文件# STATIC_ROOT = os.path.join(PROJECT_ROOT,'static').replace('\','/')#放各个app的static目录及公共的static目录#STATICfileS_Dirs:和TEMPLATE_Dirs的含义差不多,就是除了各个app的static目录以外还需要管理的静态文件设置,#比如项目的公共文件差不多。然后给静态文件变量赋值,告诉Django,静态文件在哪里#另外,Django提供了一个findstatic命令来查找指定的静态文件所在的目录,例如:D:\TestDjango>python manage.py findstatic Chrome.jpg# 默认情况下(如果没有修改STATICfileS_FINDERS的话),Django首先会在STATICfileS_Dirs配置的文件夹中寻找静态文件,然后再从每个app的static子目录下查找,# 并且返回找到的第一个文件。所以我们可以将全局的静态文件放在STATICfileS_Dirs配置的目录中,将app独有的静态文件放在app的static子目录中。# 存放的时候按类别存放在static目录的子目录下,如图片都放在images文件夹中,所有的CSS都放在CSS文件夹中,所有的Js文件都放在Js文件夹中。STATICfileS_Dirs = ( ("downloads",os.path.join(PROJECT_ROOT,'static/downloads').replace('\','/')),("uploads",'static/uploads').replace('\',)# 将app中的静态文件添加到静态文件配置列表中STATICfileS_Dirs += MY_STATIC_Dirs# 最后关键的部分是STATICfileS_Dirs以下配置# 简要说一下,static文件夹在项目里,有CSS Js images 三个文件夹(看项目结构),他们的路径分别是:# os.path.join(STATIC_ROOT,'CSS'),os.path.join(STATIC_ROOT,'Js'),os.path.join(STATIC_ROOT,'images');# 我们分别给他们起三个别名CSS,Js,images(你可以随意给,不过为了易记,我们原名称指定别名了)TEMPLATE_Dirs = ( os.path.join(PROJECT_ROOT,'templates').replace('\',)# 配置应用的模板文件路径TEMPLATE_Dirs += MY_TEMPLATE_Dirs# 配置缓存 CACHES = { 'default': {  'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache','LOCATION': 'unix:/tmp/memcached.sock','KEY_PREFIX': 'lcfcn','TIMEOUT': None } }LOGIN_REDIRECT_URL = '/'LOGIN_URL = '/auth/login/'logoUT_URL = '/auth/logout/'# 指用户上传的文件,比如在Model里面的fileFIEld,ImageFIEld上传的文件。如果你定义# MEDIA_ROOT=c:\temp\media,那么file=models.fileFIEld(upload_to="abc/"),上传的文件就会被保存到c:\temp\media\abc。MEDIA_ROOT必须是本地路径的绝对路径。MEDIA_ROOT = os.path.join(PROJECT_ROOT,'static/uploads')# MEDIA_URL是指从浏览器访问时的地址前缀。MEDIA_URL = '/uploads/'# 应用注册列表INSTALLED_APPS = ( 'django.contrib.admin','django.contrib.sites','django.contrib.sitemaps',)#为了不和系统应用混合,自己开发的应用放在这里# 将自己写的app添加到应用列表中去INSTALLED_APPS += MY_APPS# django 中间件# django处理一个Request的过程是首先通过django 中间件,然后再通过默认的URL方式进行的。# 所以说我们要做的就是在django 中间件这个地方把所有Request拦截住,# 用我们自己的方式完成处理以后直接返回Response,那么我们可以简化原来的设计思路,# 把中间件不能处理的 Request统统不管,丢给Django去处理。MIDDLEWARE_CLASSES = ( 'django.mIDdleware.cache.UpdateCacheMIDdleware',# 'django.contrib.auth.mIDdleware.SessionAuthenticationMIDdleware','django.mIDdleware.cache.FetchFromCacheMIDdleware',)ROOT_URLconf = 'lcforum.urls'Wsgi_APPliCATION = 'lcforum.wsgi.application'#数据库配置DATABASES = { 'default': MYDB.get('sqlite'),}# 语言LANGUAGE_CODE = 'zh-cn'# 时区TIME_ZONE = 'Asia/Shanghai'USE_TZ = True# 在template中使用静态文件# 采用这种方式需要有一些额外配置,打开settings.py,确认TEMPLATE_CONTEXT_PROCESSORS中包含有'django.core.context_processors.static'# TEMPLATE_CONTEXT_PROCESSORS = (# 'django.core.context_processors.deBUG',# 'django.core.context_processors.i18n',# 'django.core.context_processors.media',# 'django.core.context_processors.static',# 'django.contrib.auth.context_processors.auth',# 'django.contrib.messages.context_processors.messages',## 'django.core.context_processors.tz',# # 'blog.context_processors.custom_proc',自定义函数# )#from django.conf import settings#gettext = lambda s: s#getattr()# 假设有个工程djangodemo,有两个app为demo1跟demo2# django处理static的方法是把各个app各自的static合并到一处# 比如:# djangodemo/djangodemo/static 放置公共静态文件# djangodemo/demo1/static 放置该app自己的静态文件# djangodemo/demo2/static 放置该app自己的静态文件# 可以这么设置:# STATIC_ROOT = '/www/djangodemo/djangodemo/static '# STATIC_URL = '/static/'# STATICfileS_Dirs = (# 'djangodemo/static',# 'demo1/static/',# 'demo2/static/',# )# 使用命令# manage.py collectstatic# 就会自动把所有静态文件全部复制到STATIC_ROOT中# 如果开启了admin,这一步是很必要的,不然部署到生产环境的时候会找不到样式文件# 不要把你项目的静态文件放到这个目录。这个目录只有在运行manage.py collectstatic时才会用到

总结

以上所述是小编给大家介绍的django中的setting最佳配置小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

总结

以上是内存溢出为你收集整理的django中的setting最佳配置小结全部内容,希望文章能够帮你解决django中的setting最佳配置小结所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1201219.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存