djangosettings最佳配置

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

#encoding=utf-8importosimportsocket

SITE_ID= 1#项目的根目录#简化后面的操作PROJECT_ROOT = os.path.dirname(os.path.dirname(__file__))#加载应用#把应用添加到INSTALLED_APPS中fromapps.kuser.mysettingimportmyapp as kuser_appfromapps.blog.mysettingimportmyapp as blog_app

MY_APPS= blog_app +kuser_app#加载静态文件fromapps.blog.mysettingimportmy_staticfiles as blog_staticfilesfromapps.kuser.mysettingimportmy_staticfiles as kuser_staticfiles

MY_STATIC_DIRS= blog_staticfiles +kuser_staticfiles#加载模板文件fromapps.blog.mysettingimportmy_templates as blog_templatesfromapps.kuser.mysettingimportmy_templates as kuser_templates

MY_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'#得到主机名defhostname():

sys=os.nameifsys =='nt':

hostname= os.getenv('computername')returnhostnameelifsys =='posix':

host= os.popen('echo $HOSTNAME')try:

hostname=host.read()returnhostnamefinally:

host.close()else:raiseRuntimeError('Unkwon hostname')#调试和模板调试配置#主机名相同则为开发环境,不同则为部署环境#ALLOWED_HOSTS只在调试环境中才能为空ifsocket.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',#你的数据库用户名'PASSWord':'',#你的数据库密码'HOST':'',#你的数据库主机,留空默认为localhost'PORT':'3306',#你的数据库端口},'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 findstaticChrome.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", os.path.join(PROJECT_ROOT,'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.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','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.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware',#'django.contrib.auth.middleware.SessionAuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware','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',#'django.contrib.messages.context_processors.messages',## '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时才会用到

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航