【静态文件】
什么是静态文件:图片,CSS,js,音频,视频等
【静态文件的配置】
在settings.py中配置
步骤:
step1.配置静态文件的访问路径(该配置默认存在):
- 该访问路径表示通过哪个url地址寻找静态文件
- 指定访问静态文件时需要通过/static/xxx或者http://127.0.0.1:8000/static/xxx('xxx'表示具体的静态资源位置,'xxx'前面的'/static/'表示现在配置的访问路径,即STATIC_URL)
STATIC_URL = '/static/'
step2.配置静态文件的存储路径:
- STATTICFILES_DIRS保存的是静态文件在服务器端的存储位置("static"表示静态文件的存储文件夹,是直接在项目文件夹下创建的)
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)
# 注意:最后一定要加上逗号,因为这是元组!
【静态文件访问】
*模板中访问静态文件:img标签为例
- 方案1:直接拼接访问路径
<img src="/static/images/xxx.jpg">
或者
<img src="http://127.0.0.1:8000/static/images/xxx.jpg">
- 方案2:通过{% static %}标签访问静态文件
- 加载static:{% load static %}
- 使用静态资源:<img src="{% static '静态资源路径' %}">
【Django应用】
*是不是所有的业务模块的视图函数都放在一个views.py里?解耦?
应用:在Django项目中是一个独立的业务模块。可以包含自己的路由、视图、模板、模型
【创建应用】
step1:用manage.py中的子命令startapp创建应用文件夹
python3 manage.py startapp 应用名
step2:在settings.py的INSTALLED_APPS列表中配置安装此应用
INSTALLED_APPS = [
'应用1的应用名',
'应用2的应用名'
]
应用文件夹结构:
- migrations文件夹:放置当前应用模型层相关迁移文件
- admin.py:管理后台
- apps.py:应用下的相关配置
- models.py:模型层的入口
- tests.py:测试模块
- views.py:当前应用的视图模块
【分布式路由】
Django中,主路由配置文件(urls.py)可以不处理用户具体路由,主路由配置文件的可以做请求的分发(分布式请求处理)。具体的请求可以由各自的应用来进行处理。
【配置分布式路由】
step1:主路由中调用include函数。用于将当前路由转到各个应用的路由配置文件的urlpatterns进行分布式处理。
include('app名字.url模块名')
step2:应用下配置urls.py。应用下手动创建urls.py文件,内容结构同主路由完全一样。
样例:(以http://127.0.0.1:8000/music/index为例)
主路由urls.py中:
from django.urls import path, include # 导入include
urlpatterns = [
path('admin/', admin.site.urls),
path('music/', include('music.urls')) # 此行调用
]
应用下的urls.py中:
from django.urls import path
from . import views
urlpatterns = [
# http://127.0.0.1:8000/music/index
path('index', views.index_view)
]
【应用下的模板】
应用内部可以配置模板目录。
step1:应用下手动创建templates文件夹
step2:在settings.py中开启应用模板功能
TEMPLATE配置项中的'APP_DIRS'值为True即可
****应用下templates和外层templates都存在时,Django会按照查找模板规则处理:
- 优先查找外层templates目录下的模板
- 若外层未找到,则按INSTALLED_APPS配置下的应用顺序逐层查找
解决办法:
在应用的templates文件夹下创建一个与当前应用同名的文件夹,将模板放置在该文件夹中,之后用'应用名/模板文件'进行响应,如:
一个news应用,templates文件夹下创建了一个news文件夹,模板文件index.html放置在news文件夹中,我们可以通过'news/index.html'使用该模板:
return render(request, 'news/index.html')
【模型层】
负责跟数据库之间进行通信。
【Django配置mysql】
step1:安装前确认是否已安装python3-dev和default-libmysqlclient-dev(两个python包),若没安装则需要安装
(图中第二项和第四项)
# 查看是否安装
sudo apt list --installed|grep -E 'libmysqlclient-dev|python3-dev'
# 安装python3-dev和default-libmysqlclient-dev包(哪个没有就安装哪个)
sudo apt-get install python3-dev default-libmysqlclient-dev
step2:安装python库mysqlclient(版本1.3.13以上)
sudo pip3 install mysqlclient
step3:进入mysql(mysql -uroot -p),执行以下命令。通常数据库名与项目名保持一致
create database 数据库名 default charset utf8
step4:在settings.py里进行数据库配置,修改DATABASE配置项的内容,将sqlite3改为mysql
DATABASE = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库存储引擎
'NAME': '要连接的数据库的名称',
'USER': '登录到数据库的用户名',
'PASSWORD': '数据库的密码',
'HOST': '连接具体数据库的IP',
'PORT': '连接具体数据库的端口'
}
}
*其他数据库存储引擎,
如:'django.db.backends.sqlite3'、'django.db.backends.oracle'、'django.db.backends.postgresql'
【模型】
模型:一个Python类,它是由django.db.models.Model派生出的子类
- 一个模型类代表数据库中的一张数据表
- 模型类中每一个类属性都代表数据库中的一个字段
- 模型是数据交互的接口,是表示和操作数据库的方法和方式
【ORM框架】
- 定义:ORM(Object Relational Mapping),即对象关系映射,它是一种程序技术,它允许我们使用类和对象对数据库进行操作,从而避免通过SQL语句操作数据库
- 作用:
- 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库
- 根据设计的模型类生成数据库中的表格
- 通过简单的配置就可以进行数据库的切换
- 优点:
- 只需要面向对象编程,不需要面向数据库编写代码(对数据库的操作都转化成对类属性和方法的操作;不用编写各种数据库的SQL语句)
- 实现了数据模型与数据库的解耦,屏蔽了不同数据库操作上的差异(不在关注用的是mysql、oracle等数据库的内部细节;通过简单的配置就可以轻松更换数据库,而不需要修改代码)
- 缺点:
- 对于复杂业务,使用成本较高
- 根据对象的操作转换成SQL语句,根据查询的结果转化成对象,在映射过程中有性能损失
- 映射关系:
【模型示例】
*添加一个bookstore_book数据表来存放图书馆中书目信息
step1:添加一个bookstore的APP
python3 manage.py startapp bookstore
step2:添加模型类并注册APP
以下是创建模型类:
# 模板
# file: 应用文件夹/models.py
from django.db import models
class 模型类名(models.Model):
字段名 = models.字段类型(字段选项)
# 样例
# file: bookstore/models.py
from django.db import models
class Book(models.Model):
title = models.CharField("书名", max_length=50, default='')
price = models.DecimalField('定价', max_digits=7, decimal_places=2, default=0.0)
step3:数据库迁移
*迁移:是Django同步您对模型所作更改(添加字段,删除模型等)到数据库模式的方式
- 生成迁移文件(命令:python3 manage.py makemigrations):将应用下的moedls.py文件生成一个中间文件,并保存在migrations文件夹中
- 执行迁移脚本程序(命令:python3 manage.py migrate):执行迁移程序实现迁移,将每个应用下的migrations目录中的中间文件同步回数据库
最终得到mysql数据库表如下:
bookstore_book表内容如下: