生成迁移文件
在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/ 之后可以发现对应的数据已经被删除了