第54天:django学习(三)

页面上的增删改查

创建一个django项目(使用django3版本)day54------dj,并创建应用app01

在models.py文件中创建表

python 复制代码
class UserInfo(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    gender = models.CharField(max_length=32)

迁移数据库到db.sqlite3

用户列表展示

在urls.py文件中配置路由

python 复制代码
from django.contrib import admin
from django.urls import path
from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('userlist/', views.userlist)
]

视图文件view.py

python 复制代码
from django.shortcuts import render, HttpResponse, redirect
from app01 import models

# Create your views here.

def userlist(request):
    user_list = models.UserInfo.objects.all()
    return render(request, 'user_list.html', locals())

模板文件user_list.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style></style>
    <script src="/static/js/jquery_3.7.1_jquery.min.js"></script>
    <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css">
    <script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <h1 class="text-center">用户列表</h1>
        <a href="" class="btn btn-success">添加</a>
        <table class="table table-striped table-hover table-bordered">
            <thead>
                <tr>
                    <td>ID</td>
                    <td>username</td>
                    <td>password</td>
                    <td>gender</td>
                    <td>action</td>
                </tr>
            </thead>
            <tbody>
            {% for user in user_list  %}
                <tr>
                    <td>{{ user.id }}</td>
                    <td>{{ user.username }}</td>
                    <td>{{ user.password }}</td>
                    <td>{{ user.gender }}</td>
                    <td>
                        <a href="" class="btn btn-success">修改</a>&nbsp;&nbsp;&nbsp;
                        <a href="" class="btn btn-danger">删除</a>
                    </td>
                </tr>
            {% endfor %}
            </tbody>
        </table>
    </div>
</div>
</body>
</html

用户列表的修改功能

在路由文件中添加路由

python 复制代码
path('edit/', views.edit),

在视图文件view.py中添加edit方法

python 复制代码
def edit(request):
    edit_id = request.GET.get('id')
    edit_obj = models.UserInfo.objects.filter(id=edit_id).first()
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        gender = request.POST.get('gender')
        print(username, password, gender)
        affect_rows = models.UserInfo.objects.filter(id=edit_id).update(username=username, password=password,
                                                                        gender=gender)
        return redirect('/userlist/')
    return render(request, 'edit.html', locals())

在模板文件user_list.html中添加路径

html 复制代码
<a href="/edit/?id={{user.id}}" class="btn btn-success">修改</a>&nbsp;&nbsp;&nbsp;

添加模板文件edit.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style></style>
    <script src="/static/js/jquery_3.7.1_jquery.min.js"></script>
    <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css">
    <script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <h1 class="text-center">修改页面</h1>
        <form action="" method="POST">
            <div class="form-group">
                用户名:<input type="text" class="form-control" name="username" value="{{ edit_obj.username }}">
            </div>
            <div class="form-group">
                密码:<input type="password" class="form-control" name="password" value="{{ edit_obj.password }}">
            </div>
            <div class="form-group">
                性别:<input type="text" class="form-control" name="gender" value="{{ edit_obj.gender }}">
            </div>
            <div class="form-group">
                <input type="submit" class="btn btn-info btn-block" value="确定">
            </div>
        </form>
    </div>
</div>
</body>
</html>

用户列表的删除功能

在路由文件中添加路由

python 复制代码
path('delete/', views.delete),

在视图文件view.py中添加delte方法

python 复制代码
def delete(request):
    del_id = request.GET.get('id')
    del_obj = models.UserInfo.objects.filter(id=del_id).delete()
    return redirect('/userlist/', locals())

在模板文件user_list.html中添加路径

html 复制代码
<a href="/delete/?id={{ user.id }}" class="btn btn-danger">删除</a>

用户列表的添加功能

在路由文件中添加路由

python 复制代码
path('add/', views.delete),

在视图文件view.py中添加delte方法

python 复制代码
def add(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        gender = request.POST.get('gender')
        affect_rows = models.UserInfo.objects.create(username=username, password=password, gender=gender)
        return redirect('/userlist/', locals())
    return render(request, 'add.html')

在模板文件user_list.html中添加l路径

html 复制代码
<a href="/add/" class="btn btn-success">添加</a>

添加模板文件add.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style></style>
    <script src="/static/js/jquery_3.7.1_jquery.min.js"></script>
    <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css">
    <script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <h1 class="text-center">添加页面</h1>
        <form action="" method="POST">
            <div class="form-group">
                用户名:<input type="text" class="form-control" name="username">
            </div>
            <div class="form-group">
                密码:<input type="password" class="form-control" name="password">
            </div>
            <div class="form-group">
                性别:<input type="text" class="form-control" name="gender">
            </div>
            <div class="form-group">
                <input type="submit" class="btn btn-info btn-block" value="添加">
            </div>
        </form>
    </div>
</div>
</body>
</html>

创建表关系

在models.py文件中创建表关系

python 复制代码
"""图书表"""
class Book(models.Model):
    
    title = models.CharField(max_length=64)
    price = models.DecimalField(max_digits=8, decimal_places=2)
    
    """对于外键字段关系,会自动帮我们拼接_id"""
    publish = models.ForeignKey(to='Publish')
    
    """authors它是一个虚拟字段,它不会实际在表中创建出来这个字段,这一句可以自动帮助我们创建出来第三张表"""
    authors = models.ManyToManyField(to='Author')
    
"""出版社表"""
class Publish(models.Model):
    
    name = models.CharField(max_length=64)
    addr = models.CharField(max_length=64)


"""作者表"""
class Author(models.Model):
    
    name = models.CharField(max_length=64)
    author_detail = models.OneToOneField(to='AuthorDetail')

"""作者详情表"""
class AuthorDetail(models.Model):
    
    phone = models.CharField(max_length=64)
    email = models.CharField(max_length=64)

django的请求生命周期流程图

相关推荐
Rabitebla14 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
坤坤子吖18 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习
YLCHUP1 天前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
旖旎夜光1 天前
【C++ 基础入门】C++11 新特性(中):右值引用、移动语义与完美转发
开发语言·c++·笔记·学习
星恒随风1 天前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
2603_969694852 天前
【JavaWeb学习记录】MyBatis核心知识点与实战笔记:从入门到动态SQL
笔记·sql·学习·mysql·mybatis·javaweb·学习方法
可乐ea2 天前
智能体记忆该拆成几层:笔记、记忆表示与注入上下文
服务器·数据库·笔记·ai智能体·提示词工程·上下文工程·记忆系统
Go Work2 天前
两个等值条件摆着,MySQL 偏要全表扫
经验分享·笔记
Oll Correct2 天前
Adobe illustrator 案例十四:花元素标志草图绘制
笔记·ui·adobe·illustrator
每月一号准时摆烂2 天前
服务器运维笔记(一)——使用shell编写实时查看BMC功率的脚本
运维·服务器·笔记