Python - Django 建站 ——第二篇

一、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: 防止恶意程序单击劫持。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值