【Django】 数据交互流程

生成迁移文件

在django进行数据交互之前,需要首先生成一个迁移文件,详细的过程在这之前部署Django的时候提到过,在生成相关的数据库配置文件之前需要先配置对应的数据库(案例使用的是SQLlite)

命令

python3 manage.py migrate

在生成迁移文件之后,我们就可以来做一个简单的数据交互案例了;首先我们打开models.py文件创立一个数据模型;

from django.db import models

# Create your models here.
# 使用一个类来保存这个对象(数据表文件对象),说明是数据模型的方法,就是继承Django的数据模型 Models
class student(models.Model):
    # 简单的给这个对象设置两个属性,姓名和年龄(并设定最大值为16 和 默认值是1)
    s_name = models.CharField(max_length=16)
    s_age = models.IntegerField(default=1)

在设置完成之后,我们通过命令:

$ python3 manage.py makemigrations App

App 是之前注册好的 App包;生成对应的数据初始化配置文件;该文件在migrations目录下,文件名称为0001_initial.py

# Generated by Django 3.0.6 on 2020-06-05 23:49

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='student',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('s_name', models.CharField(max_length=16)),
                ('s_age', models.IntegerField(default=1)),
            ],
        ),
    ]
# 从创建数据模型的方法CreateModel中可以看出,Django 创建的数据模型会自带一个 ID 号

接着使用命令

$ python3 manage.py migrate

进行数据迁移

数据迁移全部完成之后,我们会在database选项卡中看到新生成的数据表
在这里插入图片描述到了这一步,接下来就可以对数据进行简单增删改查操作了

添加数据

要实现添加数据,首先要调用添加数据的功能,我们可以在 urls.py 中新增一条路由信息(都别忘了导入对应的包)

urlpatterns = [
    path('admin/', admin.site.urls),
    path('addstudent/',views.addstudent)     # 新增添加学生对象的路由信息
]

然后在views.py中创建这个路由信息返回的视图函数

from django.http import HttpResponse
from django.shortcuts import render
from App.models import student
import random

# Create your views here.
def addstudent(request):
    # 实例化一个models对象
    stu = student()     
    # 定义需要添加的学生对象姓名,并拼接对应的随即数字
    stu.s_name = 'Jerry %d' % random.randint(0,100)
    # 将添加的学生对象保存并提交到数据库中
    stu.save()
    # 在网页端返回添加成功信息,并返回添加的学生姓名
    return HttpResponse("添加成功 %s" % stu.s_name)

然后启动服务器;访问:http://127.0.0.1:8000/addstudent/ 进行检测

每刷新一次就会添加一个新的学生对象,结果如图所示:
在这里插入图片描述在这里插入图片描述

查询数据

在查询数据阶段首先我们实现在控制台打印对应的学生信息,然后再实现将学生信息先是在网页上的功能。

现在我们需要查询对应的学生信息,同样的,也是需要在:urls.py文件中添加一条新的路由信息:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('addstudent/',views.addstudent),
    path('getstudent/',views.get_student)
]

然后我们进入:views.py添加这个路由信息对应的视图函数:

def get_student(request):
    # 通过 入口函数 objects 获取对应模型的所有条目
    stus = student.objects.all()
    # 遍历刚刚获取的所有信息,生成每个学生的信息并打印
    for stu in stus:
        print(stu.s_name)
    return HttpResponse("查询成功")

然后我们启动服务器,访问:http://127.0.0.1:8000/getstudent/ 进行测试

在控制台发现输出了对应的学生姓名

[06/Jun/2020 08:41:13] "GET /getstudent/ HTTP/1.1" 200 12
Not Found: /favicon.ico
Jerry 83
Jerry 81
Jerry 41
Jerry 77
Jerry 34
Jerry 50

表示查询成功,接着我们需要将这些数据提交到浏览器端进行查看

在浏览器端访问数据

首先我们需要新建一个可视化的网页,在App 目录下 创建 templates目录,并标记为模板目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FAzf3zeu-1591411967909)(/home/martin/图片/typora/image-20200606084452105.png)]

此时新建一个 html5 网页,并views.py中返回这个网页的渲染:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Student_list</title>
</head>
<body>
    <h1>{{ hobby }}</h1>
    <h2>{{ sys }}</h2>
    <ul>
       {% for stu in stus %}      ----------列表循环语句
        <li>
            {{ stu.s_name }}      ----------调取循环语句的结果
        </li>
        {% endfor %}              ----------结束当前循环
    </ul>
</body>
</html>

这里使用的是 django的模板语言,一般从视图函数中获取数据,并返回给前端网页进行使用,简单的模板语言一般以 {{ 这里可以放置对应数据在后台的键名 }},在循环语句中,使用的模板语言:一般分为,使用当前循环语句,调取循环结果和结束当前循环三个部分组成

在模板网页创建完毕之后,我们回到views.py文件,给对应的网页传递数据源

def get_student(request):
    stus = student.objects.all()
    for stu in stus:
        print(stu.s_name)
        # 使用 context 字典变量保存对应的数据元
    context = {
        'hobby':'online games',    # 给简单模板语句传入参数;键是刚刚在网页模板中定义的键
        'sys':'ubuntu',
        'stus':stus			# 给循环模板语句传参数,数据元是接受所有数据的列表
    }
	# 在返回html 页面的时候,将context 作为参数传入模板网页
    return render(request,"getstudent.html",context=context)

接着我们访问http://127.0.0.1:8000/getstudent/进行测试,发现对应的数据已经返回给了网页模板

在这里插入图片描述

修改数据

在查询数据之后,我们可以修改对应数据的属性,首先我们打开:urls.py 更新一个路由信息

urlpatterns = [
    path('admin/', admin.site.urls),
    path('addstudent/',views.addstudent),
    path('getstudent/',views.get_student),
    path('updatestudent/',views.update_student)     # 更新的路由信息
]

然后我们在 views.py 文件中创建新的视图函数:

def update_student(request):
    # 从入口函数获取数据库的值,并获取对应id号为 1 的值
    stu = student.objects.get(pk=1)
    # 将这个对应的🆔名称改为merson
    stu.s_name = 'merson'
    # 保存这个更改
    stu.save()
    # 在网页端返回一个提示信息
    return HttpResponse("更新成功")

运行服务器,我们可以看见以下结果

在这里插入图片描述

此时访问对应的查询网页
在这里插入图片描述

发现第一个参数的属性已经发生了变化,我们也可以在后台的数据库文件中看见(修改数据库文件后记的刷新)

在这里插入图片描述
id 为 1 的名称被改为了 merson

删除数据

在最后我们进行数据的删除操作,同样的,也是新建一条路由规则信息

urlpatterns = [
    path('admin/', admin.site.urls),
    path('addstudent/',views.addstudent),
    path('getstudent/',views.get_student),
    path('updatestudent/',views.update_student),
    path('delstudent/',views.del_student)         # 新建的路由信息
]

然后我们编写对应的视图函数

def del_student(request):
    # 获取待删除的选项
    stu = student.objects.get(pk=3)
    # 删除对应数据
    stu.delete()
    # 在网页端输出返回信息
    return HttpResponse("删除成功!")

启动服务器,访问http://127.0.0.1:8000/delstudent/ 之后可以发现对应的数据已经被删除了

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值