1.静态文件
静态文件一般是指网页中的图片、js、css、音视频文件。是指不会随着用户的请求动态变更的文件信息和互联网资源。
关于静态文件的配置,需要在settings.py中进行指定。
(1)配置静态文件的访问路径。
(2)STATIC_URL = ‘/static/’
(3)说明:
指定访问静态文件时需要通过/static/xxx或者http://127.0.0.1/static/xxx
[xxx表示具体的资源位置]
配置静态文件的存储路径STATICFILES_DIRS,保存的是静态文件在服务器端的存储位置。
STATICFILES_DIRS = (
os.path.join(BASE_DIR,”static”),
)
修改配置文件settings.py如下:
通过在模板层直接使用img标签以常规html5使用超链接的绝对地址和相对地址都能够从static模板中引入我们需要的资源文件。
另外一种方案是Django给我们提供的。
通过{% static %}标签访问静态文件
1.加载static, - {% load static %}
2.使用静态资源 - {% static ‘静态资源路径’ %}
3.样例
<img src = “{% static ‘/image/img.png’ %}”>
在使用{%static% }标签前,首先需要使用{% load static%}进行静态资源的导入。
通过static标签进行定义,如果在settings.py中修改了STATIC_URL的值,那么可以在不修改模板文件中的url的情况下,直接让模板层能够加载静态资源,避免路径的重新拼接,节约开发时间和开发成本。
2.Django应用及分布式路由
应用是指在Django项目中,是一个独立的业务模块,可以包含自己的视图、模板、模型。
应用之间的代码也应当实现相互隔离,避免项目过于复杂。
创建应用需要手动进行创建。
使用命令:
Python manage.py startapp [应用名]
随后在settings.py中的INSTALLED_APPS列表中配置安装此应用。
使用命令:
在项目目录下,得到了一个和应用名同名的项目文件夹:
在文件夹创建成功后,可以在settings.py中增加创建的应用名称到INSTALLED_APP数组中。可以看到INSTALLED_APP中有一些默认的数据,暂时可以不用管这些默认数据,我们只要增加我们的新应用程序即可。这个流程也被称之为“应用注册”
在应用程序文件夹中,migrations是一个数据库同步文件夹,主要用于和DB进行交互。admin.py是django提供的一个admin管理后台。
分布式路由
分布式路由主要解决应用程序过多导致的路由过于复杂。避免多条路由需要重复的在项目文件的同一个urls.py中进行编写导致的开发困难。
主要实现方式为:主路由配置文件urls.py不处理具体的客户端路由请求。主路由有且实现对请求的分发,将请求分发到其他特定的应用中,由各自应用实现对路由的处理。
要实现这种方式,需要在应用程序内新建一个文件urls.py用于处理应用内的路由。由urls.py将请求转发到views应用。
为了实现这种方式,需要在主路由中使用include函数导入应用程序。
语法:
Include(‘app名字’,url模块名)
我们这里创建的是一个appdemo的应用程序,因此,在Demo1的urls中,为了实现请求转发,在urlpatterns中添加如下内容。
使用inclde方式将appdemo/的请求转发到appdemo下的urls.py中。
为了实现include函数,需要在django.urls导入include
from django.urls import include
接下来,在appdemo应用程序的urls.py中增加一条path规则。如果没有urls.py,则需要新建一个。
随后在demo1下的views.py中,对这条应用程序内的路由规则进行处理。
通过浏览器访问,确认主路由和应用程序之间实现的分布式路由效果成功实现。
应用下的模板
在应用下手动创建templates文件夹。
Settings.py中,开启应用模板功能,配置TEMPLATE的APP_DIRS的值为True。
当应用下的templates和外层的templates都存在时,Django需要查找模板规则:
1.优先查找外层templates目录下的模板
2.按照INSTALLED_APPS配置下的应用顺序逐层查找。
在实际操作中,将templates下的index.html进行编写,并在views.py中使用render函数读写模板层文件。
在对这些文件进行编辑后,打开浏览器访问,测试网页信息。
可以发现,应用程序下的views函数起了作用,从应用程序文件夹下的templtes模板层文件夹中获取了显示页面并展示给用户。
如果外层有模板,那么优先寻找外层的模板,否则寻找应用下的同名文件。为了解决这一问题,可以通过嵌套同名文件夹、更改文件名和文件夹名的方式解决。
模型层及ORM
关于模型层
模型层的主要作用是负责跟数据库进行通信。有且仅有模型层能够和数据库进行交互。
由于模型层需要连接数据库,因此,需要在python中安装一个mysqlclient,在django中,ORM层是基于mysqlclient连接mysql。
因此,在安装前,需要先安装python3-dev和default-libmysqlclient-dev用于连接mysql库。
对于mysqlclient的安装
由于直接使用pip install mysqlclient安装失败,因此前往官网下载whl文件进行安装。
官网地址: https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
由于我的python版本为3.6,电脑为64位,因此我下载了对应的mysqlclient系统,cp3.6_win_amd64意味着3.6版本的python和64位的电脑版本。
下载后使用pip命令安装,得到successfully installed的结果意味着mysqlclient安装成功。
如果是linux系统,需要先使用apt-get命令安装python3-dev和default-libmysqlclient-dev两个组件,才能使用pip进行mysqlclient的安装,否则安装过程中可能会出现错误。
对于mysql服务器的配置
1.创建数据库
一般数据库的名称和项目名称相同。
2.进入mysql数据库执行
3.Settings.py进行数据库的配置
在settings.py中找到一个DATABASES的参数,通过修改DATABASES的参数来实现对数据库的连接。
在Django中,不同的数据库的连接所用的参数和引擎内容是不一样的,不同数据库的连接方法需要前往django官网进行深入学习,他们使用的参数也有所不同。因此,在这里仅仅展示mysql的连接方式。每个参数的意思在备注中也进行了表明。
什么是模型?
模型是Python的一个类,是由Django.db.models.Model派生出的子类。
一个模型类代表数据库的一张数据表。
模型类中的每一个类属性都代表数据库中的一个字段。
模型是数据交互的接口,是表示和操作数据的方法和方式。
ORM框架
ORM也就是对象关系映射。这是一种程序计数,允许开发者使用类和对象对数据库进行操作,从而避免通过sql语句操作数据库。
作用:
1.建立模型类和表之间的对应关系。允许通过面向对象的方式来操作数据库。
2.根据设计的模型类生成数据库中的表格。
3.通过简单的配置就可以进行数据库的切换。
相当于在建立数据库的时候, 数据库就是一个对象,通过ORM计数,把每个数据库的属性当成某一个特定对象的属性,那么我们只要对该对象的属性进行操作,就可以自动的连接到数据库中提取出目标数据且无需注意底层的数据库语句的编写。
在我们更换数据库的时候,仅仅需要在settings.py中切换我们的数据库目标就可以实现数据库的切换。
只需要使用面向对象的编程技术,不需要面向数据库编写代码,实现了数据模型和数据库的解耦合,屏蔽了不同数据库操作上的差异,开发人员无需关注mysql、oracle等数据库的内部细节。
但是对于复杂的业务而言,使用的成本会过高。根据对象的操作转换成sql语句,根据查询的结果转换为特定的对象,在映射的过程中和语义转换中会有性能的损失。如果直接使用sql语句和数据库进行交互会较好的提高网站的性能,相当于增加了以此python语句到sql语句的转换,好处就是无需开发人员了解数据库语句的处理。
上图展示的是ORM和DB的对应关系。
示例:编写一个应用程序studentapp和student_info数据表来存放学校的学生信息。
1.在Demo1项目中添加一个studentapp应用程序。
2.添加模型类并注册app
注册app
生成的studentapp目录下的models.py编写如下代码:
3.在数据库中新建表
现在通过show tables命令可以看到我们的数据库中是没有表文件的。
输入命令:
Python manage.py makemigrations
生成中间迁移文件
根据models.py的内容生成中间文件,并保存在migrations文件夹中。
输入命令:
Python manage.py migrate
执行迁移程序实现数据库的迁移,将每个应用下的migrate迁移到mysql服务器中。
可以登录远程服务器查看是否出现了新的表文件。
通过desc命令查看模型层的数据库内容可以发现对于数据内容已经成功的新建了。数据表格式和我们在模型层中建立的类的内容是完全一致的。避免了开发人员需要重复的进行数据库代码的编写和运行。
因此,可以归纳出,在模型层,创建数据库的语法如下:
from django.do import models;
Class 模型类名(models.Model):
字段名 = models.字段类型(字段选项)