django ORM数据的增删改查,django的请求生命周期图,路由层相关 #day52
django ORM数据的增删改查
一、模板语法分配变量
2.view.py中定义函数方法,以及增加数据
from django.shortcuts import render
# Create your views here.
def index(request):
user_dic = {'name': 'yuziqi', 'age': 18}
user_dic1 = {'name': 'yuziqi', 'age': 18}
user_dic2 = {'name': 'yuziqi', 'age': 18}
user_dic3 = {'name': 'yuziqi', 'age': 18}
user_dic4 = {'name': 'yuziqi4', 'age': 18}
# 第一种方式
# return render(request, 'index.html', {'user_dic': user_dic})
# 第二种方式
print(locals())
return render(request, 'index.html', locals())
3.创建index.html将html文件返回显示在浏览器中
二、注册功能实现
1、在models.py中创建User类,并连接数据库得到一个表
from django.db import models
# Create your models here.
class User(models.Model):
# 主键 id int primary key auto_increment
# id = models.AutoField(primary_key=True)
"""
如果你的主键字段就叫id,那么你就可以省略不写,django会自动帮你创建一个字段为id的主键
但是,如果你的主键字段名不叫id,你就需要自己手动书写了
"""
# uid = models.AutoField(primary_key=True)
name = models.CharField(max_length=64)
password = models.CharField(max_length=64, null=True)
2、
from django.shortcuts import render, redirect
from app01 import models
# Create your views here.
def index(request):
user_dic = {'name': 'yuziqi', 'age': 18}
user_dic1 = {'name': 'yuziqi', 'age': 18}
user_dic2 = {'name': 'yuziqi', 'age': 18}
user_dic3 = {'name': 'yuziqi', 'age': 18}
user_dic4 = {'name': 'yuziqi4', 'age': 18}
# 第一种方式
# return render(request, 'index.html', {'user_dic': user_dic})
# 第二种方式
print(locals())
return render(request, 'index.html', locals())
def login(request):
return render(request, 'login.html')
# 注册功能
def register(request):
# post方式
# if request.method == 'POST':
return render(request, 'register.html')
def do_reg(request):
# 接收请求参数
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# 入库操作 models.User => 指定表名
# 第一种添加数据的方式
models.User.objects.create(name=username, password=password)
# res = models.User.objects.create(name=username, password=password)
这里的res是其返回值(返回影响的行数)
# 第二种添加数据的方式
user_obj = models.User(name=username, password=password) # 得到的是对象,没有操作数据库
user_obj.save() # 才真正操作了数据库
# 跳转到登录页面
return redirect('/login/')
3、在路由urls.py文件中添加路由
4、分别在templates文件家中创建index.html, login.html, register.html
index.html
login.html
register.html
三、数据展示
1、
# 展示所有数据
def userlist(request):
# 查询所有数据
"""
QuerSet对象
<QuerySet [<User: User object>]>
"""
# 第一种方式
# userlist = models.User.objects.filter() # 在这里相当于SQL语句中的where
# 第二种方式
userlist = models.User.objects.all()
# 如果只需要一条数据,可以用first()(一般用于修改中用)
# userlist = models.User.objects.all().first()
# 只展示yuziqi的
# SQL语句 select * from user where name = 'yuziqi' and password = '123'
# filter()括号中默认就是and关系
# userlist = models.User.objects.filter(name='yuziqi', password=123).all()
# 只要是返回QuerySet对象,那么你就可以点下去,其中的filter中的条件也是and关系
userlist = models.User.objects.filter(name='yuziqi').filter(password=123).all()
print(userlist)
"""
<QuerySet [<User: jack>]>
"""
return render(request, 'userlist.html', locals())
2、
from django.db import models
# Create your models here.
class User(models.Model):
# 主键 id int primary key auto_increment
# id = models.AutoField(primary_key=True)
"""
如果你的主键字段就叫id,那么你就可以省略不写,django会自动帮你创建一个字段为id的主键
但是,如果你的主键字段名不叫id,你就需要自己手动书写了
"""
# uid = models.AutoField(primary_key=True)
name = models.CharField(max_length=64)
password = models.CharField(max_length=64, null=True)
# 每次打印对象时返回name值
def __str__(self):
return self.name
3、
四、修改数据
1、定义函数方法
# 修改
def edit_user(request):
edit_id = request.GET.get('id')
# 查询数据
edit_data = models.User.objects.filter(id=edit_id).first()
# print(edit_data)
# print(edit_data.password)
# print(edit_data.name)
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# update user set name=name where id=edit_id
# 第一种方式
models.User.objects.filter(id=edit_id).update(name=username, password=password)
# 第二种方式
user_obj = models.User.objests.filter(id=edit_id).first() # 对象
user_obj.name = username
user_obj.password = password
user_obj.save() # 才操作数据库
return redirect('/userlist/')
return render(request, 'edit.html', locals())
2、在userlist.html文件中增加表头“操作”与a链接获取所要操作的id值
<tbody>
{% for obj in userlist %}
<tr>
<td>{{ obj.id }}</td>
<td>{{ obj.name }}</td>
<td>{{ obj.password }}</td>
<td>
<a href="/edit_user/?id={{ obj.id }}" class="btn btn-primary">修改</a>
<a href="/delete_user/?id={{ obj.id }}" class="btn btn-danger">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
3、创建一个修改页面edit.html(参考前面的注册界面)
4、添加路由
五、删除数据
1、创建函数方法
def delete_user(request):
# 要删除的数据记录id
del_id = request.GET.get('id')
"""
删除有两种方式:
1、物理删除
2、软删除
"""
# sql语句 delete from user where id = del_id
# 1、物理删除
# models.User.objects.filter(id=del_id).delete()
# 2、软删除
models.User.objects.filter(id=del_id).update(is_delete=True)
return redirect('/userlist/')
2、添加路由
orm创建表关系
class Book(models.Model):
title = models.CharField(max_length=32)
# price decimal(8,2) 八位数字,其中有两位是小数
price = models.DecimalField(max_digits=8, decimal_places=2)
# 建立一对多关系,默认跟另外一张表的主键进行关联
# publish = models.ForeignKey(to='Publish' to_field='a_id')
publish = models.ForeignKey(to='Publish')
# 多对多关系
authors = models.ManyToManyField(to='Author')
"""
author是一个虚拟字段,不会创建author字段
"""
class Publish(models.Model):
title = models.CharField(max_length=32)
addr = models.CharField(max_length=32)
# a_id = models.IntegerField(max_length=32)
class Author(models.Model):
name = models.CharField(max_length=32)
# 一对一关系
detail = models.OneToOneField(to='AuthorDetail')
class AuthorDetail(models.Model):
phone = models.CharField(max_length=32)
# email varchar(254)
email = models.EmailField()
django的请求生命周期图

路由层相关的
1、url函数第一个是匹配正则
django2.x以上,
path写什么就是什么多一个或少一个都不行
re_path => url/
2、如何添加一个首页
# 首页
urlpatterns = [
# 添加一个首页
url(r'^$', views.home) # 以空开头,以空结尾
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
url(r'^register/', views.register),
url(r'^do_reg/', views.do_reg),
url(r'^login/', views.login),
# 用户列表
url(r'^userlist/', views.userlist),
url(r'^edit_user/', views.edit_user),
url(r'^delete_user/', views.delete_user),
url(r'^func/', views.func),
url(r'^home', views.home)
]

浙公网安备 33010602011771号