做个简单应用,稍微复习下前面的知识
需求:
- 首页将数据库中的用户数据全部展示,
- 然后给每一个用户两个按钮:编辑 ,删除。
- 能注册新用户
思路:
1、设计用户数据模型
app01/models.py文件内容如下
class User(models.Model):
username=models.CharField(max_length=24)
passwd=models.CharField(max_length=24)
is_deleted=models.BooleanField(default=False)
def __str__(self):
return self.username
2、设计整个系统的url
总共有4类url:
- 首页:/app01/
- 注册页:/app01/useradd
- 编辑页:/app01/useredit/用户id
- 删除:/app01/userdelete/用户id
编辑页和删除的url因根据用户id不同会有变化,所以在路由层中设置转换器匹配。
app01/urls.py文件内容如下:
from django.urls import path,include
from app01 import views
urlpatterns = [
path('',views.userlist,name='list'),
path('useradd',views.useradd,name='add'),
path('useredit/<int:id>',views.useredit,name='edit'),
path('userdelete/<int:id>',views.userdelete,name='delete'),
]
3、设计视图层和模板层
视图编写顺序一般会根据urls.py文件中的urlpatterns列表的顺序,对于还没用到的URL,其相应的视图函数可以先在views.py文件中定义,但函数体为pass。
一般在编辑视图函数的时候,也会将其使用的模板文件一起编辑。
视图层
完整的views.py文件内容:
from django.shortcuts import render,redirect,reverse
from app01 import models
# Create your views here.
def userlist(request):
user_querySet=models.User.objects.all()
return render(request,'app01/user_list.html',locals())
def useredit(request,id):
if request.method=="GET":
user_obj=models.User.objects.filter(pk=id).first()
return render(request,'app01/user_edit.html',locals())
if request.method=="POST":
username=request.POST.get('username')
passwd=request.POST.get('password')
models.User.objects.filter(pk=id).update(username=username,passwd=passwd)
print(username,passwd)
return redirect(reverse('list'))
def userdelete(request,id):
models.User.objects.filter(pk=id).delete()
return redirect(reverse('list'))
def useradd(request):
if request.method=="GET":
return render(request,'app01/user_add.html')
if request.method=="POST":
username=request.POST.get('username')
passwd=request.POST.get('password')
models.User.objects.create(username=username,passwd=passwd)
print(username,passwd)
return redirect(reverse('list'))
模板层
首页的模板user_list.html文件内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<h1 class="text-center">数据展示</h1>
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<table class="table table-striped table-hover">
<thead>
<tr>
<th>ID</th>
<th>username</th>
<th>password</th>
</tr>
</thead>
<tbody>
{% for user_obj in user_querySet %}
<tr>
<td>{{ user_obj.id }}</td>
<td>{{ user_obj.username }}</td>
<td>{{ user_obj.passwd }}</td>
<td>
<a href="{% url 'edit' user_obj.id %}" class="btn btn-primary btx-xs">编辑</a>
<a href="{% url 'delete' user_obj.id %}" class="btn btn-danger btx-xs">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<a href="{% url 'add' %}" class="btn btn-primary btn-x">注册用户</a>
</div>
</div>
</div>
</body>
</html>
注册用户的模板user_add.html文件,因为注册用户和编辑的页面大体相同,可以使用模板继承功能,由编辑页面继承注册用户页面,完整内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
{% block content1 %}
<h1 class="text-center">注册用户</h1>
{% endblock %}
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<form action="" method="post">
<p>username:<input type="text" name="username" class="form-control" value="{{ user_obj.username }}"></p>
<p>password:<input type="text" name="password" class="form-control" value="{{ user_obj.passwd }}"></p>
<input type="submit" class="btn btn-info btn-block" value="提交">
</form>
</div>
</div>
</div>
</body>
</html>
编辑页面继承自注册用户,其完整的user_edit.html文件内容:
{% extends 'app01/user_add.html' %}
{% block content1 %}
<h1 class="text-center">编辑用户</h1>
{% endblock %}