用户增删改查 django生命周期 数据库操作

一 django生命周期

1 浏览器输入一个请求(get/post)
2 响应到django程序中
3 执行到url,url通过请求的地址匹配到不同的视图函数
4 执行对应的视图函数,此过程可以查询数据库,拿到模板
5 查询完数据库得到数据,将数据渲染到模板上
6 返回浏览器

 

二 用户增删改查

1 orm介绍

tools--->Run manage.py Task
python3 manage.py makemigrations
只需要敲命令:makemigrations(记录数据库的修改记录)
python3 manage.py migrate
只需要敲命令:migrate(把数据同步到数据库)

2 orm能干和不能干的事

1 能创建数据表,新增,删除字段
2 不能创建数据库

3 orm增加字段:(注意数据库迁移命令2条)

注意:后来增加的字段,需要有默认值
phone=models.CharField(max_length=64,default='120')

4 删除字段

注释掉字段,执行数据库迁移命令

5 修改数据

直接修改字段,执行数据库迁移命令

6 user的增删改查

***重点****:
1 单表查询所有用户:models.User.objects.all()
得到的是 queryset对象(当成列表),列表里面,一个一个的对象[user1,user2]
2 render(request, 'userlist.html', {'user_list': ret})
3 模板里: {% for user in user_list %}
#要循环的内容
{{user.name}}
{% endfor%}
4 get请求携带参数:
http://127.0.0.1:8000/deleteuser/?id=1
后台取值:request.GET.get('id')
request.GET['id']
5 orm删除记录 models.User.objects.filter(id=id).delete()
返回值:影响的行数
6 前台post提交的数据取值:name=request.POST.get('name')
7 orm保存:
两种方式:
1 user=models.User.objects.create(name=name,password=pwd,address=addr)
2 user=models.User(name=name,password=pwd,address=addr)
user.save()
8 orm查询单条数据:user=models.User.objects.filter(id=id).first()
9 orm的修改 models.User.objects.filter(id=id).update(name=name,password=pwd,
address=addr)

代码示例

urls.py

from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^userlist/', views.userlist),
url(r'^deleteuser/', views.deleteuser),
url(r'^adduser/', views.adduser),
url(r'^updateuser/', views.updateuser),
]

查:

def userlist(request):
if request.method == 'GET':
# 查询user表中所有数据.--相当于sql select * from app01_user;
# 返回结果是QuerySet对象(先当成列表)
# [user1,user2]
ret = models.User.objects.all()
# print(type(ret))
# for i in ret:
# print(type(i))
# print(i.name)
return render(request, 'userlist.html', {'user_list': ret})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>password</th>
<th>addr</th>
<th>删除</th>
<th>编辑</th>
</tr>
</thead>
<tbody>
{% for user in user_list %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
<td>{{ user.password }}</td>
<td>{{ user.address }}</td>
<td><a href="/deleteuser?id={{ user.id }}">删除</a></td>
<td><a href="/updateuser?id={{ user.id }}">编辑</a></td>
</tr>
{% endfor %}

</tbody>

<a href="/adduser/">新增用户</a>
</table>
</body>
</html>

删:

def deleteuser(request):
if request.method == 'GET':
id = request.GET.get('id')
ret = models.User.objects.filter(id=id).delete()
print(ret)
return redirect('/userlist/')

添加:

def adduser(request):
if request.method=='GET':
return render(request,'adduser.html')
elif request.method=='POST':
name=request.POST.get('name')
pwd=request.POST.get('password')
addr=request.POST.get('addr')
# 方式一
# user=models.User.objects.create(name=name,password=pwd,address=addr)
# 方式二
user=models.User(name=name,password=pwd,address=addr)
user.save()
print(user.name)
print(type(user))
return redirect('/userlist/')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>新增用户</title>
</head>
<body>
<form action="" method="post">
<p>用户名: <input type="text" name="name"></p>
<p>密码: <input type="password" name="password"></p>
<p>地址: <input type="text" name="addr"></p>
<input type="submit" value="提交">

</form>
</body>
</html>

修改:

def updateuser(request):
if request.method=='GET':
id=request.GET.get('id')
user=models.User.objects.filter(id=id).first()
return render(request,'updateuser.html',{'user':user})
if request.method=='POST':
id=request.POST.get('id')
# id2=request.GET.get('id')
# print(id)
# print(id2)
name=request.POST.get('name')
pwd=request.POST.get('password')
addr=request.POST.get('addr')
models.User.objects.filter(id=id).update(name=name,password=pwd,address=addr)
return redirect('/userlist/')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改数据</title>
</head>
<body>
<form action="/updateuser/?id={{ user.id }}" method="post">
<p><input type="hidden" name="id" value="{{ user.id }}"></p>
<p>用户名: <input type="text" name="name" value="{{ user.name }}"></p>
<p>密码: <input type="text" name="password" value="{{ user.password }}"></p>
<p>地址: <input type="text" name="addr" value="{{ user.address }}"></p>
<input type="submit" value="提交">

</form>
</body>
</html>

三 数据库操作






class Publish(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
email = models.EmailField()
addr = models.CharField(max_length=64)
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
address = models.CharField(max_length=32)
class Book(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
小数部分占2位
price = models.DecimalField(max_digits=5, decimal_places=2)
一对多的关系确立,关联字段写在多的一方,orm自动在publish后面加id,publish_id
publish = models.ForeignKey(to='Publish', to_field='id')
多对多关系,orm会自动创建第三张表
authors = models.ManyToManyField(to='Author')










posted @ 2018-11-28 19:46  没有显示名称  阅读(192)  评论(0编辑  收藏  举报