这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战」
这里是清安,笔记每天都得做,今天也不例外,欢迎一起学习。
模型定义:
模型是有关数据的唯⼀、明确的信息来源。它包含存储的数据的基本字段和⾏为。通常,每个 模型都映射到单个数据库表。
每个模型都是⼀个⼦类化的 Python 类 django.db.models.Model 。
模型的每个属性代表⼀个数据库字段。
有了所有这些,Django 提供了⼀个⾃动⽣成的数据库访问 API
数据库
python操作简易的数据库比较的容易,跟上一章一样,我们需要下载一个数据库,这里用的是mysql。
pip install pymysql,这里User是你数据库的名称,我这里是root,然后点击Test测试一下链接。
连接成功后刷新一下就能看到以下界面:
在其中写入一些数据:
# 建库
create database test;
# 使用
use test;
# 建表
create table test_qingqing(
id int primary key auto_increment ,
name varchar(20) unique key,
pwd varchar(20)
);
# 插入数据
insert into test_qing(name,pwd)
values('qinganan',12345),('qqingqingan',123456),('wubieshi',123456)
这些是简单的写入数据,然后我们可以操作数据库,python操作数据库,可以参照这一篇文。
Django操作数据库
前菜介绍完,现在正题来了。我们拿上一章的项目来讲,或者自己重新创建项目应用都可行。命令就是那么些。
这里我重新创建了一个应用。注意:记得cd到目录下, >>>cd qingan >>>
python manage.py startapp qingqing。
再去注册一下这个应用。qingan>>settings.py中写入应用名称。这里值得注意的是如果你之前注册了一个应用,那么接下来就需要你指定应用执行了。
比如:执行新创建的应用模型:
python manage.py makemigrations testqing
执行完后,对应的应用中的migrations文件会出现一个0001_inital.py文件,则表示执行成功了,如果你在接下来模型中有所改动,则再次执行,会出现0002_inital.py。
然后同步到数据库:
python manage.py migrate testqing
这两步需要在创建模型后再执行哦。
链接数据库,或者初始化数据库。python manage.py migrate
创建模型
选中应用中的models.py文件比如我的应用是testqing-->>>models.py:
class ttsqlqing(models.Model):
"""
转化成了一个模型对象类
数据库中表名就是我们的类名:应用名称+_+类名(小写)
增加了name与pwd字段
"""
name = models.CharField(max_length=20)
pwd = models.CharField(max_length=10)
创建好数据后,就执行上述的两个命令python manage.py makemigrations testqing以及python manage.py migrate testqing,然后刷新一个数据库即可。
这里模型中我们创建了一个name以及pwd,对应到数据库表中则是两个字段。显示最大长度为20以及10。
如果想新增字段,可以直接在models里面直接增加代码,然后进行提交到数据库。你会遇到如下情况:
这里我们选1,然后我们输入一个值作为有效值即可
视图
接下里我们在对应的应用中的views.py中进行增删改查的操作。
视图可以为模型添加数据。这也是视图与模型交互的一个过程。
from testqing.models import testsql
from django.http import HttpResponse
# 添加
def test_create(request):
test = testsql()
test.name = 'test'
test.pwd = 'qingqingqing'
test.save()
# return render(request,"") 返回的是模板,没有模板所以用HttpResponse
return HttpResponse("添加成功")
# 查询
def test_search(request):
serch_content = testsql.objects.get(id=4)
# get方法只能接受单数的返回对象,如果搜索内哦那个返回对象是复数态或者空对象都会报错,返回是一个单数形式的对象
return HttpResponse({serch_content.name,serch_content.pwd})
# 修改
def test_update(request):
update_content = testsql.objects.get(id=4)
update_content.__dict__.update(name="wubieshi")
update_content.save() # 这里的save是提交事务
return HttpResponse("修改成功")
# 删除
def test_delete(request):
# 构建一个模型的实例化对象,然后对这个实例化对象进行查询
delete_test = testsql.objects.get(id="4")
# 调用模型实例化对象的删除方法
delete_test.delete()
return HttpResponse("删除成功")
删除操作需要去数据库中看id,看看需要删除的是哪一项的数据,写入对应的id即可。
路由
找到项目中的urls.py文件,这里面写入路由。
from testqing.views import test_create #将视图导入路由中
from testqing.views import test_delete
# 请求路径http://localhost:8000/creat/
# 路由文件
urlpatterns += [
path("creat/",test_create),
path("delete/",test_delete),
path("search/",test_search),
path("update/",test_update)
]
这里你需要先添加再删除,直接删除,数据库中没数据。如果你发错添加了删除没用,那么请到数据库中看看添加数据的id是多少,改视图中的删除函数方法中的id即可。
在视图中,除了上述的数据库写法,还有一些其他的写法:
# 添加
def test_create(request):
test = testsql()
test(name='',password='').save()
return HttpResponse("添加成功")
# 查询
def test_search(request):
serch_content = testsql.objects.filter(name="test")
# filter方法接受的复数态的内容和空对象内容,返回的是一个复数态的对象列表
returnHttpResponse({
serch_content[1].name,serch_content[1].pwd,serch_content[1].create_user})
# 修改
def test_update(request):
update_content = testsql.objects.all() # 返回的是所有数据
update_content.name = 'testwubieshi'
update_content.save()
return HttpResponse('修改成功')
# 或者
update_content = testsql.objects.all()
date = {"name":"","pwd":"","create_user":""}
update_content.update(**date) # 解包
# 方法四的基础上,一次性更改字段同一字段的所有值
# update_content = testsql.objects.filter(id=1)
return HttpResponse("修改成功")
总结:
视图、模板、路由、模型,关系
1、路由: 上层:它纸盒url地址有关系 下层:它只和视图有关系 2、视图: 可以调用模型、模板 3、模型: 模型:只能被视图调用 模型谁也不能调用 4、模板 模板能被视图调用,还能被模板调用 模板能调用模板、路由,url地址
一个url--映射--》一个路由--映射--》一个视图----》模型或模板
视图可以调用模板跟模型:
一个视图就代表一份资源:资源包括数据库数据和前端静态资源