[关闭]
@bergus 2015-12-02T06:42:52.000000Z 字数 5701 阅读 1889

django settings最佳配置

python django 配置


  1. # encoding=utf-8
  2. import os
  3. import socket
  4. SITE_ID = 1
  5. # 项目的根目录
  6. # 简化后面的操作
  7. PROJECT_ROOT = os.path.dirname(os.path.dirname(__file__))
  8. # 加载应用
  9. # 把应用添加到INSTALLED_APPS中
  10. from apps.kuser.mysetting import myapp as kuser_app
  11. from apps.blog.mysetting import myapp as blog_app
  12. MY_APPS = blog_app + kuser_app
  13. # 加载静态文件
  14. from apps.blog.mysetting import my_staticfiles as blog_staticfiles
  15. from apps.kuser.mysetting import my_staticfiles as kuser_staticfiles
  16. MY_STATIC_DIRS = blog_staticfiles + kuser_staticfiles
  17. # 加载模板文件
  18. from apps.blog.mysetting import my_templates as blog_templates
  19. from apps.kuser.mysetting import my_templates as kuser_templates
  20. MY_TEMPLATE_DIRS = blog_templates + kuser_templates
  21. # 密钥配置
  22. # 适用于开发环境和部署环境
  23. # 可以从系统环境中,配置文件中,和硬编码的配置中得到密钥
  24. try:
  25. SECRET_KEY = os.environ['SECRET_KEY']
  26. except:
  27. try:
  28. with open(os.path.join(PROJECT_ROOT, 'db/secret_key').replace('\\', '/')) as f:
  29. SECRET_KEY = f.read().strip()
  30. except:
  31. SECRET_KEY = '*lk^6@0l0(iulgar$j)faff&^(^u+qk3j73d18@&+ur^xuTxY'
  32. # 得到主机名
  33. def hostname():
  34. sys = os.name
  35. if sys == 'nt':
  36. hostname = os.getenv('computername')
  37. return hostname
  38. elif sys == 'posix':
  39. host = os.popen('echo $HOSTNAME')
  40. try:
  41. hostname = host.read()
  42. return hostname
  43. finally:
  44. host.close()
  45. else:
  46. raise RuntimeError('Unkwon hostname')
  47. #调试和模板调试配置
  48. #主机名相同则为开发环境,不同则为部署环境
  49. #ALLOWED_HOSTS只在调试环境中才能为空
  50. if socket.gethostname().lower() == hostname().lower():
  51. DEBUG = TEMPLATE_DEBUG = True
  52. ALLOWED_HOSTS = []
  53. else:
  54. ALLOWED_HOSTS = [
  55. 'baidu.com',
  56. '0.0.0.0',
  57. ]
  58. DEBUG = TEMPLATE_DEBUG = False
  59. #数据库配置
  60. MYDB = {
  61. 'mysql': {
  62. 'ENGINE': 'django.db.backends.mysql',
  63. 'NAME': 'books', #你的数据库名称
  64. 'USER': 'root', #你的数据库用户名
  65. 'PASSWORD': '', #你的数据库密码
  66. 'HOST': '', #你的数据库主机,留空默认为localhost
  67. 'PORT': '3306', #你的数据库端口
  68. },
  69. 'sqlite': {
  70. 'ENGINE': 'django.db.backends.sqlite3',
  71. 'NAME': os.path.join(PROJECT_ROOT, 'db/db.sqlite3').replace('\\', '/'),
  72. }
  73. }
  74. # 给静态文件url一个后缀,在templates里用到的。
  75. # 映射到静态文件的url
  76. # STATIC_URL的含义与MEDIA_URL类似
  77. STATIC_URL = '/static/'
  78. # 总的static目录
  79. # 可以使用命令 manage.py collectstatic 自动收集static文件
  80. # STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static').replace('\\', '/')
  81. #放各个app的static目录及公共的static目录
  82. #STATICFILES_DIRS:和TEMPLATE_DIRS的含义差不多,就是除了各个app的static目录以外还需要管理的静态文件设置,
  83. #比如项目的公共文件差不多。然后给静态文件变量赋值,告诉Django,静态文件在哪里
  84. #另外,Django提供了一个findstatic命令来查找指定的静态文件所在的目录,例如:D:\TestDjango>python manage.py findstatic Chrome.jpg
  85. # 默认情况下(如果没有修改STATICFILES_FINDERS的话),Django首先会在STATICFILES_DIRS配置的文件夹中寻找静态文件,然后再从每个app的static子目录下查找,
  86. # 并且返回找到的第一个文件。所以我们可以将全局的静态文件放在STATICFILES_DIRS配置的目录中,将app独有的静态文件放在app的static子目录中。
  87. # 存放的时候按类别存放在static目录的子目录下,如图片都放在images文件夹中,所有的CSS都放在css文件夹中,所有的js文件都放在js文件夹中。
  88. STATICFILES_DIRS = (
  89. ("downloads", os.path.join(PROJECT_ROOT, 'static/downloads').replace('\\', '/')),
  90. ("uploads", os.path.join(PROJECT_ROOT, 'static/uploads').replace('\\', '/')),
  91. )
  92. # 将app中的静态文件添加到静态文件配置列表中
  93. STATICFILES_DIRS += MY_STATIC_DIRS
  94. # 最后关键的部分是STATICFILES_DIRS以下配置
  95. # 简要说一下,static文件夹在项目里,有css js images 三个文件夹(看项目结构),他们的路径分别是:
  96. # os.path.join(STATIC_ROOT,'css'),os.path.join(STATIC_ROOT,'js'),os.path.join(STATIC_ROOT,'images');
  97. # 我们分别给他们起三个别名css,js,images(你可以随意给,不过为了易记,我们原名称指定别名了)
  98. TEMPLATE_DIRS = (
  99. os.path.join(PROJECT_ROOT, 'templates').replace('\\', '/'),
  100. )
  101. # 配置应用的模板文件路径
  102. TEMPLATE_DIRS += MY_TEMPLATE_DIRS
  103. # 配置缓存
  104. CACHES = {
  105. 'default': {
  106. 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
  107. 'LOCATION': 'unix:/tmp/memcached.sock',
  108. 'KEY_PREFIX': 'lcfcn',
  109. 'TIMEOUT': None
  110. }
  111. }
  112. LOGIN_REDIRECT_URL = '/'
  113. LOGIN_URL = '/auth/login/'
  114. LOGOUT_URL = '/auth/logout/'
  115. # 指用户上传的文件,比如在Model里面的FileFIeld,ImageField上传的文件。如果你定义
  116. # MEDIA_ROOT=c:\temp\media,那么File=models.FileField(upload_to="abc/"),上传的文件就会被保存到c:\temp\media\abc。MEDIA_ROOT必须是本地路径的绝对路径。
  117. MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'static/uploads')
  118. # MEDIA_URL是指从浏览器访问时的地址前缀。
  119. MEDIA_URL = '/uploads/'
  120. # 应用注册列表
  121. INSTALLED_APPS = (
  122. 'django.contrib.admin',
  123. 'django.contrib.auth',
  124. 'django.contrib.contenttypes',
  125. 'django.contrib.sessions',
  126. 'django.contrib.messages',
  127. 'django.contrib.staticfiles',
  128. 'django.contrib.sites',
  129. 'django.contrib.sitemaps',
  130. )
  131. #为了不和系统应用混合,自己开发的应用放在这里
  132. # 将自己写的app添加到应用列表中去
  133. INSTALLED_APPS += MY_APPS
  134. # django 中间件
  135. # django处理一个Request的过程是首先通过django 中间件,然后再通过默认的URL方式进行的。
  136. # 所以说我们要做的就是在django 中间件这个地方把所有Request拦截住,
  137. # 用我们自己的方式完成处理以后直接返回Response,那么我们可以简化原来的设计思路,
  138. # 把中间件不能处理的 Request统统不管,丢给Django去处理。
  139. MIDDLEWARE_CLASSES = (
  140. 'django.middleware.cache.UpdateCacheMiddleware',
  141. 'django.contrib.sessions.middleware.SessionMiddleware',
  142. 'django.middleware.common.CommonMiddleware',
  143. 'django.middleware.csrf.CsrfViewMiddleware',
  144. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  145. # 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
  146. 'django.contrib.messages.middleware.MessageMiddleware',
  147. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  148. 'django.middleware.cache.FetchFromCacheMiddleware',
  149. )
  150. ROOT_URLCONF = 'lcforum.urls'
  151. WSGI_APPLICATION = 'lcforum.wsgi.application'
  152. #数据库配置
  153. DATABASES = {
  154. 'default': MYDB.get('sqlite'),
  155. }
  156. # 语言
  157. LANGUAGE_CODE = 'zh-cn'
  158. # 时区
  159. TIME_ZONE = 'Asia/Shanghai'
  160. USE_TZ = True
  161. # 在template中使用静态文件
  162. # 采用这种方式需要有一些额外配置,打开settings.py,确认TEMPLATE_CONTEXT_PROCESSORS中包含有'django.core.context_processors.static'
  163. # TEMPLATE_CONTEXT_PROCESSORS = (
  164. # 'django.core.context_processors.debug',
  165. # 'django.core.context_processors.i18n',
  166. # 'django.core.context_processors.media',
  167. # 'django.core.context_processors.static',
  168. # 'django.contrib.auth.context_processors.auth',
  169. # 'django.contrib.messages.context_processors.messages',
  170. #
  171. # 'django.core.context_processors.tz',
  172. # 'django.contrib.messages.context_processors.messages',
  173. # # 'blog.context_processors.custom_proc',自定义函数
  174. # )
  175. #from django.conf import settings
  176. #gettext = lambda s: s
  177. #getattr()
  178. # 假设有个工程djangodemo,有两个app为demo1跟demo2
  179. # django处理static的方法是把各个app各自的static合并到一处
  180. # 比如:
  181. # djangodemo/djangodemo/static 放置公共静态文件
  182. # djangodemo/demo1/static 放置该app自己的静态文件
  183. # djangodemo/demo2/static 放置该app自己的静态文件
  184. # 可以这么设置:
  185. # STATIC_ROOT = '/www/djangodemo/djangodemo/static '
  186. # STATIC_URL = '/static/'
  187. # STATICFILES_DIRS = (
  188. # 'djangodemo/static',
  189. # 'demo1/static/',
  190. # 'demo2/static/',
  191. # )
  192. # 使用命令
  193. # manage.py collectstatic
  194. # 就会自动把所有静态文件全部复制到STATIC_ROOT中
  195. # 如果开启了admin,这一步是很必要的,不然部署到生产环境的时候会找不到样式文件
  196. # 不要把你项目的静态文件放到这个目录。这个目录只有在运行manage.py collectstatic时才会用到
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注