django中的setting最佳配置小结
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路径
1
2
3
4
5
6
7
8
9
10
11
|
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数据库则不需要改
1
2
3
4
5
6
|
DATABASES = { 'default' : { 'ENGINE' : 'django.db.backends.sqlite3' , 'NAME' : os.path.join(BASE_DIR, 'db.sqlite3' ), } } |
如果使用mysql数据库需要将上述数据库注掉修改如下
1
2
3
4
5
6
7
8
9
10
|
DATABASES = { 'default' : { 'ENGINE' : 'django.db.backends.mysql' , 'NAME' : 'blog' , #你的数据库名称 数据库需要自己提前建好 'USER' : 'root' , #你的数据库用户名 'PASSWORD' : '', #你的数据库密码 'HOST' : '', #你的数据库主机,留空默认为localhost 'PORT' : '3306' , #你的数据库端口 } } |
并且需要在应用的__init__.py文件添加
1
2
|
import pymysql pymysql.install_as_MySQLdb() |
详情可以查看://www.jb51.net/article/128674.htm
3、sql语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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、静态文件目录
1
2
3
4
|
STATIC_URL = '/static/' #调用时目录 STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static" ), #具体路径 ] |
5、如果数据库中的UserInfo(用户表)继承django内置AbstractUser
1)model需导入
1
|
from django.contrib.auth.models import AbstractUser |
2)配置文件
1
|
AUTH_USER_MODEL = "应用名.UserInfo" |
6、中间件
自己写的中间件,例如在项目中的md文件夹下md.py文件中的M1与M2两个中间件
1
2
3
4
5
6
7
8
9
10
11
|
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)数据库配置(默认)
1
2
3
4
5
6
7
8
9
10
11
|
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)缓存配置
1
2
3
4
5
6
7
8
9
10
11
|
配置 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)默认配置
1
2
3
4
5
6
7
8
9
10
11
|
配置 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)也可以自定义配置 但是自定义的配置都要写到配置文件最后 代码中使用时可以导入配置
1
2
|
from django.conf import settings settings.配置名 |
2)上面所有配置都是针对特定问题需要修改的 系统默认配置不做说明
3)上面配置只是前面django系列随笔所遇到的常用配置 后续所遇配置都会逐步在此随笔中持续添加跟新
下面看段django settings最佳配置实例代码,具体代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
# encoding=utf-8 import os import socket SITE_ID = 1 # 项目的根目录 # 简化后面的操作 PROJECT_ROOT = os.path.dirname(os.path.dirname(__file__)) # 加载应用 # 把应用添加到INSTALLED_APPS中 from apps.kuser.mysetting import myapp as kuser_app from apps.blog.mysetting import myapp as blog_app MY_APPS = blog_app + kuser_app # 加载静态文件 from apps.blog.mysetting import my_staticfiles as blog_staticfiles from apps.kuser.mysetting import my_staticfiles as kuser_staticfiles MY_STATIC_DIRS = blog_staticfiles + kuser_staticfiles # 加载模板文件 from apps.blog.mysetting import my_templates as blog_templates from apps.kuser.mysetting import my_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' # 得到主机名 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' , #你的数据库用户名 '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 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" , 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时才会用到 |

原文链接:http://www.cnblogs.com/liluning/archive/2017/11/20/7868683.html

微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
django中的setting最佳配置小结的更多相关文章
- 测试开发之Django——No4.Django中前端框架的配置与添加
我们在开发一个web项目的时候,虽然我们不是专业开发,但是我们也想要做出来一个美美的前端页面. 这种时候,百度上铺天盖地的前端框架就是我们的最好选择了. 当然,在网上直接下载的框架,我们是不能直接用的 ...
- Django中的 动态URL配置
举个例子,一家在线书店会为每一本书提供一个URL,如:/books/243/./books/81196/. 让我们创建第三个视图来显示当前时间和加上时间偏差量的时间,设计是这样的: /time/plu ...
- Django 中Admin站点的配置
Admin站点是django提供的一个后台管理页面,可以用来对用户与数据库表数据进行管理. Admin站点配置流程 1.在settings.py文件中INSTALL_APPS列表中添加django.c ...
- Django中Cookie和Session配置和操作
Cookie Cookie以键值对Key-Value形势进行信息的存储. Cookie基于域名安全,不同域名的Cookie是不能互相访问的 Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏 ...
- Struts框架中struts-config.xml文件配置小结
弄清楚struts-config.xml中各项元素的作用,对于我们构建web项目有莫大的好处.<struts-config>是struts的根元素,它主要有8个子元素,DTD定义 如下: ...
- django中的setting全局变量的导入
需求:在py文件中导入settings.py中的变量BASE_DIR settings.py文件 import os # Build paths inside the project like thi ...
- django中静态文件的配置路径
一 先找到配置文件 二 将配置文件添加上(注意名字一定要大写)
- Django中模板查找路径配置
- 关于Django中ORM数据库迁移的配置
Django中ORM数据库迁移配置 1,若想将模型转为mysql数据库中的表,需要在settings中配置: DATABASES = { 'default': { 'ENGINE': 'django. ...
随机推荐
- 张超超OC基础回顾_05 property修饰符,id类型,instancetype。。。
一.property 如果给一个属性同时提供了getter/setter方法, 那么我们称这个属性为可读可写属性 如果只提供了getter方法, 那么我们称这个属性为只读属性 如果只提供了setter ...
- Java 基于spring 暴露接口 供外部调用
在springmvc的配置文件添加创建如下的bean: <!-- 暴露一个webService连接 --> <bean class="org.springframework ...
- 在线创建MongoDB免费集群(MangoDB Atlas)
MongoDB Atlas是MongoDB的云服务,构建在亚马逊的AWS上,MongoDB允许用户在上面创建一个免费集群作为学习使用. 1. 注册MongoDB cloud账号: 访问www.mong ...
- 3、python的传入参数
转载:https://blog.csdn.net/abc_12366/article/details/79627263 1.位置参数: def func(a, b): print(a+b) func( ...
- Django框架 之 基于Ajax中csrf跨站请求伪造
Django框架 之 基于Ajax中csrf跨站请求伪造 ajax中csrf跨站请求伪造 方式一 1 2 3 $.ajaxSetup({ data: {csrfmiddlewaretoken: ...
- linux蓝屏时间修改
setterm -blank 2 #/etc/profile里添加这样一句话,可以让屏幕2分钟后没有信号(蓝屏) setterm -blank 0 #/etc/profile里添加这样一句话, ...
- Oracle——分组函数
AVG(平均值)和 SUM (合计)函数 可以对数值型数据使用AVG 和 SUM 函数. AVG组函数忽略空值 --在组函数中使用NVL函数 --求平均值 )) MIN(最小值)和 MAX(最大值)函 ...
- C高级第一次作业
未来两周学习内容 复习指针的定义和引用 指针的应用场景: 指针作为函数参数(角色互换) 指针作为函数的参数返回多个值 指针.数组和地址间的关系 使用指针进行数组操作 数组名(指针)作为函数参数(冒泡排 ...
- IIS 身份验证
IIS 支持以下身份验证模式: 匿名.如果不需要对客户端进行身份验证(或者使用自定义身份验证机制,如窗体身份验证),则可将 IIS 配置为允许匿名访问.在该事件中,IIS 创建一个 Windows 令 ...
- APP压力稳定性测试
转自:https://www.cnblogs.com/nuonuozhou/p/8643735.html 1.android系统自带monkey程序,模拟用户触摸屏幕,滑动track ball,按键等 ...