六、django应用实例(一)

做个简单应用,稍微复习下前面的知识

需求:

  1. 首页将数据库中的用户数据全部展示,
  2. 然后给每一个用户两个按钮:编辑 ,删除。
  3. 能注册新用户

思路:

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 %}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值