Django -- settings 详解(转)
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() |
详情可以查看:http://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时才会用到 |
Django -- settings 详解(转)的更多相关文章
- Django -- settings 详解
Django settings详解 1.基础 DJANGO_SETTING_MODULE环境变量:让settings模块被包含到python可以找到的目录下,开发情况下不需要,我们通常会在当前文件夹运 ...
- Django 2.0 学习(20):Django 中间件详解
Django 中间件详解 Django中间件 在Django中,中间件(middleware)其实就是一个类,在请求到来和结束后,Django会根据自己的规则在合适的时机执行中间件中相应的方法. 1. ...
- Django中间件详解
Django中间件详解 中间件位置 WSGI 主要负责的就是负责和浏览器和应用之家沟通的桥梁 浏览器发送过来一个http请求,WSGI负责解包,并封装成能够给APP使用的environ,当app数据返 ...
- Django框架详解之url
Django基本命令 下载Django pip3 install django 创建一个django project django-admin.py startproject cms 当前目录下会生成 ...
- Django路由详解
一.路由基础 1.路由url函数:路由自上而下进行匹配:url(正则路径,视图函数内存地址,默认参数,路由别名) 2.路由正则: 规定开始:^ | 规定结束:$ #url(r'index', view ...
- Django session 详解-part II-session
Django中的session是一个高级工具,它可以让用户存储个人信息以便在下次访问网站中使用这些信息.session的基础还是cookie,但是它提供了一些更加高级的功能.请看下面的一个例子: 使用 ...
- Django ORM详解
ORM:(在django中,根据代码中的类自动生成数据库的表也叫--code first) ORM:Object Relational Mapping(关系对象映射) 我们写的类表示数据库中的表 我们 ...
- 很详细的Django入门详解
Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!采用了MVC的框架模式,即模型M,视图V和控制器C,也可以称为MVT模式,模型M,视图V,模板T.在学 ...
- 22:django 配置详解
django配置文件包含了你的django安装的所有配置信息,本节为大家详细讲解django的配置 基本知识 一个配置文件只是一个包含模块级别变量的的python模块,所有的配置变量都是大写的,哈哈哈 ...
随机推荐
- SpringBoot整合Mybatis之xml
SpringBoot整合Mybatis mybatis ORM框架.几个重要的概念: Mapper配置 : 可以使用基于XML的Mapper配置文件来实现,也可以使用基于Java注解的Mybatis注 ...
- 解题:SPOJ 3734 Periodni
题面 按列高建立笛卡尔树,转成树上问题...... 笛卡尔树是什么? 它一般是针对序列建立的,是下标的BST和权值的堆(即中序遍历是原序列连续区间,节点权值满足堆性质),这里不讲具体怎么建树(放在知识 ...
- [学习笔记]凸优化/WQS二分/带权二分
从一个题带入:[八省联考2018]林克卡特树lct——WQS二分 比较详细的: 题解 P4383 [[八省联考2018]林克卡特树lct] 简单总结和补充: 条件 凸函数,限制 方法: 二分斜率,找切 ...
- 使用swagger2配置springboot时出现的问题
这个问题踩了几次坑了,这次又遇到了,不记录一下看来是不长记性了: 测试普通的增删改查的时候,发现删除和查询是对的,可是增加和更新却数据绑定不到controller的参数上面去. 因为是自定义的实体类, ...
- es6 export 和 export default区别
相信很多人都使用过export.export default.import,然而它们到底有什么区别呢? 在JavaScript ES6中,export与export default均可用于导出常量.函 ...
- 【转载】SQL注入原理讲解
这几篇文章讲的都很不错,我看了大概清除了sql注入是怎么一回事,打算细细研究一下这个知识,另写一篇博客: 原文地址:http://www.cnblogs.com/rush/archive/2011/1 ...
- CCNA学习与实验指南——第3章 以太网
以太网就是局域网,IEEE制定了802.2和802.3两种标准.802.2规定了OSI模型的数据链路层的上半部分(LLC子层),802.3规定了OSI模型的数据链路层的下半部分和物理层(MAC子层). ...
- CF876 D 树状数组
大意就是放n个硬币,每次放一个计算下这种情况下的操作次数,一个操作为从左到右扫描,如果一个硬币右边是空的,就将硬币后移,否则该次操作停止. 显然发现对于一个情况,我们只要考虑最右边的空位的左侧有几个硬 ...
- 干货:制作科研slide简明规范
- Spring4总结
1. 明确Spring的主要作用就是为代码“解耦”,降低代码间的耦合度.使用IoC使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了,而是由Spring容器统一管理,自动 ...