每日python,第二十六篇,Django视图

147 阅读5分钟

这是我参与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--映射--》一个路由--映射--》一个视图----》模型或模板
    视图可以调用模板跟模型:
    一个视图就代表一份资源:资源包括数据库数据和前端静态资源