模型定义
模型是有关数据的唯⼀、明确的信息来源。它包含存储的数据的基本字段和⾏为。通常,每个
模型都映射到单个数据库表。
基础知识:
每个模型都是⼀个⼦类化的 Python 类 django.db.models.Model 。
模型的每个属性代表⼀个数据库字段。
有了所有这些,Django 提供了⼀个⾃动⽣成的数据库访问 API
MySQL数据库操作
# 创建数据库
create database test;
# 连接指定数据库
use test;
# 创建和设计表
create table test
(
id int primary key auto_increment,
name varchar(20) unique key,
password varchar(30)
);
# 插⼊数据
insert into test(name, password)
values ('test001', 123456),
('test002', 654321),
('test003', 456789);
# 查看数据
select * from test;
python操作数据库
⾸先python操作数据库---->pymysql
pip install pymysql
操作数据库
# 导⼊pymysql模块
import pymysql
from pymysql.cursors import DictCursor
# 建⽴连接对象
conn = pymysql.connect(host='127.0.0.1', user='root',password='*****', port=3306, database='test',cursorclass=DictCursor)
# 获取游标
cursor = conn.cursor() # 执⾏完毕返回的结果集默认是以元组显示的
sql = "select * from test;"
res = cursor.execute(sql)
print(res)
cursor_fetchall = cursor.fetchall()
print(cursor_fetchall)
print(type(cursor_fetchall))
cursor.close()
总结
我们操作数据库需要使⽤的必要信息有:数据库主机地址(host),端⼝ (port),⽤户名(user),密码(password),数据库名称(database);
同时我们操作数据库,需要通过连接数据库之后,维持着数据库的链接并将其链接的数据库对 象,实例化出⼀个对象--->游标;通过游标传递指令及其信息。
在Django中,我们的模型不需要这样做,因为Django内部集成了ORM-对象关系映射(Object Relational Mapping,简称 ORM )⽤于实现⾯向对象编程语⾔⾥不同类型系统的数据之间的 转换。
ORM 在业务逻辑层和数据库层之间充当了桥梁的作⽤。ORM 是通过使⽤描述对象和数据库 之间的映射的元数据,将程序中的对象⾃动持久化到数据库中。
Django-模型操作数据库
⾸先我们创建⼀个Django项⽬testproject:
django-admin startproject testproject
然后我们在testproject中创建⼀个应⽤testapp:
cd testproject
python manage.py startapp testapp
注册应⽤
初始化数据库数据:
python manage.py migrate
创建模型
在models.py⽂件中编辑内容:
class Test(models.Model):
name = models.CharField(max_length=20) # 构建数据类型和字段的长度
password = models.CharField(max_length=20) # 构建数据类型和字段的长度
记录模型操作
终端执⾏命令进行提交:
python manage.py makemigrations
执行该命令后,会在testapp\migrations目录中增加一个0001_initial.py文件
提交完成之后执行命令进行上传,此时才算真正上传到数据库中
python manage.py migrate
执行完命令后需要手动去刷新一下数据库,新建的数据表才会出来
# 转化为一个模型对象类
class Test(models.Model):
"""
1.创建数据中表,表会自动创建,表名的写法 =(应用名称 + _ + 类名)全部小写
2。为表创建字段,并定义字段的类型和长度
3.在终端输入python manage.py makemigrations,进行提交
4.提交之后输入python manage.py migrate进行上传,此时才会上传到数据库中
"""
# 数据库中的表名就是我们的类名,表名的写法 =(应用名称 + _ + 类名)全部小写
# 为数据库中的表增加了两个字段,分别为name和password字段
name = models.CharField(max_length=20) # 构建数据类型和字段的长度
password = models.CharField(max_length=20) # 构建数据类型和字段的长度
"""
创建字段的时候,参数名称就是我们定义的变量;赋值内容就是我们对这个字段的限定条件
"""
模型的职责:
为我们的数据库添加和管理表和表结构,起决定性作用的是提交后出现的0001_initial.py,我们在models.py文件中进行的操作是为了出现该文件,该文件出现后可以在该文件中进行增删改查
视图与模型的交互
操作模型新增数据库数据
⾸先,在视图(views.py)定义添加数据的方法:
"""
可以为在模型中创建的数据库添加数据
"""
# 导包,将模型中定义的类导入到视图中
from testapp.models import Test
# 定义一个方法,用来为数据库中的创建的表添加数据
def test_create(request):
# 实例化模型对象
test = Test()
test.name = 'test'
test.password = 'test1234'
test.save()
return HttpResponse('添加成功')
在路由中设置访问的地址和调用的方法
from django.contrib import admin
from django.urls import path
from testapp.views import test_create
urlpatterns = [
path('admin/', admin.site.urls),
]
urlpatterns += [
path('create/', test_create),
]
运行项目,请求URL地址,查看返回的结果
可以在数据库中查询是否成功的添加了数据
select * from testapp_test
操作模型删除数据库数据
⾸先,在视图(views.py)定义删除数据的方法:
"""
可以为在模型中创建的数据库添加数据
"""
# 导包,将模型中定义的类导入到视图中
from testapp.models import Test
# 定义一个方法,用来删除数据库中的数据
def test_delete(request):
# 实例化模型对象
# 对该实例化对象进行查询操作
test_data = Test.objects.get(id='1')
# 调用实例化模型对象的删除方法
test_data.delete()
# 每次写完方法后需要加一个return
return HttpResponse('删除成功')
在路由中设置访问的地址和调用的方法
from django.contrib import admin
from django.urls import path
from testapp.views import test_create
from testapp.views import test_delete
urlpatterns = [
path('admin/', admin.site.urls),
]
urlpatterns += [
path('create/', test_create),
path('delete/', test_delete),
]
运行项目,请求URL地址,查看返回的结果
可以在数据库中查询是否成功删除了指定的数据
select * from testapp_test
总结
视图、模板、路由、模型是如何相互调用的
路由:
上层,只和url地址有关系
下层,只和视图有关系
视图:
就目前来说,视图只能被路由所调用
路由可以调用模型、模板
模型:
模型只能被视图调用
模板:
模板能被视图和模板调用
模板能调用模板、url地址
url ----> 路由 ---->视图 ------>模型和模板
一个视图就代表一份资源,资源包括数据库数据和前端静态资源