一、Django 的配置
配置文件setting.py用于配置整个网站的环境和功能,核心配置:项目路径、密匙配置、域名访问权限、App列表和中间件。
调试模式DEBUG:该值为布尔类型,开发调试阶段设置为True。项目部署上线应改为False,保护项目相关信息。
域名访问权限ALLOWED_HOSTS: 调试模式下可为空,只允许localhost或127.00.1访问,但项目上线后必填,否则程序无法启动。
App列表:
- admin: 内置后台管理系统
- auth: 内置用户认证系统
- contenttypes:记录项目中所有model元数据(Djano的ORM框架)
- sessions:Session会话功能,用于标识当前访问网站的用户身份,记录相关用户信息。
- message: 消息提示功能。
- staticfiles: 查找静态资源路径
创建的新的App都要添加进去。
二、资源文件配置
2.1 资源路由——STATIC_URL
静态资源:由配置属性STATIC_URL、STATICFILES_DIRS和STATIC_ROOT进行设置,一般指网站中不易改变的文件, 包括CSS文件,JavaScript文件以及图片资源等。
- CSS: 层叠样式(Cascading Style Sheets): 表现HTML等文件样式的计算机语言。
- JavaScript: 直译式脚本语言。用来给HTML网页增加动态功能。
媒体资源:由MEDIA_URL、和MEDIA_ROOT决定
CSS, JavaScript 在setting中的默认配置:
默认情况下,Django只能识别项目应用App的static文件夹里面的静态资源。项目启动时,Django会从项目应用App里面查找相关的资源文件,查找功能主要由App列表INSTAED_APPS的staticfiles实现。
在index下创建static文件夹,放入candle.jpg. 在调试模式,只能识别App的static文件下的静态资源,如果文件夹改名,Django就无法识别。
运行项目,访问http://127.0.0.1:8000/static/candle.jpg
如果在其他路径创建静态文件夹,Django就无法识别,如在根目录下创建mystatic,那么上面方法不能打开mystatic文件夹下的Rose.jpg图片
2.2 资源集合——STATICFILES_DIRS
若想在网页上正常访问图片,可将index下的static文件夹以及根目录下的mystatic写入资源合集STATICFILES_DIRS, 在setting.py中设置STATICFILES_DIRS的属性,该属性以列表[ ]的形式表示。
再次运行后,访问http://127.0.0.1:8000/static/Rose.jpg,图片就能正常访问
http://127.0.0.1:8000/static/Rose.jpg 路径中的static是指STATIC_URL = '/static/' 中STATIC_URL的值。
3,资源部署——STATIC_ROOT
STATIC_ROOT作用是在服务器上部署项目,实现服务器与项目之间的映射。主要作用是收集整个项目的静态资源,并存放在一个新的文件夹下,然后由该文件夹与服务器构建映射关系。配置如下。
项目调试阶段(DEBUG = True) 的时候无需使用STATIC_ROOT
设置STATIC_ROOT需要使用Django操作指令collectstatic来收集所有静态资源,这些静态资源都会保存在STATIC_ROOT所设置的文件夹里。
4,媒体资源——MEDIA
除了静态资源,对于一些经常变动的资源,通常将其存放在媒体资源文件夹,如用户头像、歌曲文件等。
媒体资源的配置属性只有MEDIA_URL和 MEDIA_ROOT。
在根目录下创建media文件,并存放图片Candlem.gif
然后setting.py里设置配置属性MEDIA_URL和MEDIA_ROOT。MEDIA_URL用于媒体资源的路由地址,MEDIA_ROOT用于获取media文件夹在本机的完整路径。
配置属性设置后,还要将media文件夹注册到Django里,让Django知道如何找到媒体文件,否则无法在浏览器上访问该文件夹。
打开MyDjango文件夹下的urls.py文件,为media添加相应的路由地址。
运行项目,访问http://127.0.0.1:8000/media/Candlem.gif
3,模板配置
模板是一种较为特殊的HTML文档,嵌入了一些能够让Django识别的变量和指令,由Django模板引擎解析这些变量和指令,生成HTML网页并返回给用户。
模板是Django中MTV中的T部分,配置模板路径是告诉Django如何找到模板位置。已有的初始模板配置信息如下
- BACKEND: 定义模板引擎,来识别模板里的变量和指令,内置引擎有DjangoTemplates 和jinja2.Jinja2。
- DIRS: 模板所在路径,模板配置通常配置该项的属性即可
- APP_DIRS: 是否在App里查找模板文件。
- OPTIONS: 用于填充在RequestContext的上下文,一般情况不做修改。
在项目的根目录和index下分别创建templates文件夹,并在文件夹下分别创建文件index.html 和app_index.html
通常情况下,根目录的templates存放共用的模板文件,能为各个App的模板文件调用。配置templates:
4,数据库配置
如何用mysqlclient和pymysql模块实现Django和MySQL数据库的交互,如何实现单个项目与多个数据库的连接方式?
4.1, mysqlclient 连接MySQL
数据库配置是选择项目所使用的数据库类型,不同数据库需要设置不同数据库引擎,实现项目与数据库互联。Django提供4种数据库引擎:
- ‘django.db.backends.postgresql’
- 'django.db.backends.mysql'
- 'django.db.backends.sqlite3'
- 'django.db.backends.oracle'
项目创建时默认使用Sqlite3数据库,这是一款轻型数据库,常用语嵌入式系统开发,而且占用资源非常少,配置如下:
如果改为MySQL数据库,首先安装MySQL模块,mysqldb不支持Python3, 因此Django2.0以上版本不再使用mysqldb,二是用mysqlclient模块。
打开命令行输入安装指令 pip install mysqlclient. 然后在setting.py中配置
运行一下,系统提示没有django_db这个数据库,去命令提示符窗口创建一个。
删除一个数据库 drop database <name>;
可以打开Navicat Premium软件查看本地MySQL数据库
刚创建的数据库django_db是一个空白的数据库,在PyCharm的Terminal界面下输入Django操作指令python manage.py migrate 来创建Django内置功能的数据表。
Admin后台系统,Auth用户系统等,这些功能都要借助数据表实现,该指令将内置迁移文件生成数据表。Navicat中:
使用mysqlclient连接MySQL数据库时,Django对mysqlclient的版本有要求,打开Django源代码查看版本要求。
4.2 pymysql 连接MySQL
除了使用mysqlclient模块连接MySQL外还可以使用pymysql模块连接MySQL数据库。
安装pymysql, pip install pymysql , 安装后,setting.py的数据无需修改,只要在MyDjango文件夹的__init__.py中设置数据库连接模块。
要验证pymysql模块连接MySQL数据库,建议先将mysqlclient模块卸载,排除干扰因素,验证方式与mysqlclient模块连接MySQL验证方式一致。验证之前记得将django_db中的数据表删除。
如果使用的MySQL版本是8.0以上,连接时会出现错误信息,因为加密方式改变,变回原来的加密方式,在MySQL可视化工具中运行如下SQL语句:
# newpassword 是已设置的用户密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
FLUSH PRIVILEGES;
Django 还支持SQL Server和MongoDB的连接。
运行出现报错:解决方法1, 删掉上面__init__.py里面的代码;2,pip install --upgrade pymysql,
4.3 多个数据库的连接方式
一个项目可能需要使用多个数据库才能满足开发需求,特别是对数据量过大的系统,单个数据库存储的数据越多就会使服务器负载越大,因此将数据库划分为多个数据库服务器共同存储,对各个数据库服务器进行连接。
配置中,DATABASES的属性以字典格式表示,字典里的每一对键值代表连接某一个数据库。
上述共连接3个数据库,django_db 和 mydjango_db属于MySQL数据系统,sqlite3属于Sqlite3数据库系统。配置属性有3个键值对:default、MyDjango 和 MySqlite3,每个键值对代表Django连接了某个数据库。
如果项目定义了多个模型,每个模型可以选择在某个数据库中生成数据表,如果不指定,模型就会在键值为default的数据库里生成。
5, 中间件
中间件(Middleware)是一个用来处理Django的请求(Request)和响应(Response)的框架级别的钩子,用于在全局范围内改变Django的输入和输出。
用户进行网站操作,这个过程用户向网站发送HTTP请求(Request),网站响应返回相关网页内容(Response)
Django接收到用户请求时,首先经过中间件处理请求信息,然后再将处理结果返回用户。
开发者可以根据自己的需要自定义中间件,只要将自定义的中间件添加到配置属性MIDDLEWARE中激活即可。
一般情况下,Django默认的中间件配置可满足大部分开发需求。
在项目的MIDDLEWARE中添加LocaleMiddleware中间件,使得Django内置的功能支持中文显示:
配置属性MIDDLEWARE的数据格式为列表类型,每个中间件的设置顺序是固定的,如果随意变更中间件,就很容易导致程序异常。
- SecurityMiddleware: 内置安全机制,保护用户与网站的通信安全。
- SessionMiddleware: 会话Session功能。
- LocaleMiddleware: 国际化和本地化功能。
- CommonMiddleware: 处理请求信息,规范化请求内容。
- CsrfViewMiddleware: 开启CSRF防护功能。
- AuthenticationMiddleware: 开启内置的用户认证系统。
- MessageMiddleware: 开启内置的信息提示功能。
- XFrameOptionsMiddleware: 防止恶意程序单击劫持。