Django基础03--模型

本文介绍了Django中的模型概念,如何通过模型定义数据库表,以及如何使用Django的ORM进行数据库操作,包括创建数据库表、添加和删除数据。同时,文章探讨了视图与模型的交互,阐述了在Django项目中各组件的角色和调用关系。
摘要由CSDN通过智能技术生成

模型定义

模型是有关数据的唯⼀、明确的信息来源。它包含存储的数据的基本字段和⾏为。通常,每个

模型都映射到单个数据库表。

基础知识:

        每个模型都是⼀个⼦类化的 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 ----> 路由 ---->视图 ------>模型和模板

一个视图就代表一份资源,资源包括数据库数据和前端静态资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值