Djiango实现用户管理增删改成功能实战

news2024/11/25 14:05:24

1.0定义

前后端不分离模式
在这里插入图片描述

前后端分离是指前端页面看到的效果都是由后端控制,即后端渲染HTML页面,前端与后端的耦合度比较高
前后端分离模式
在这里插入图片描述

后端仅返回前端所需要的数据,不在渲染HTML页面,不在控制前端的效果,至于前端展示什么效果,都有前端自己决定。

2.0 认识RestFulAPI

1.0 REST 是一种web服务的软件架构风格,描述网络中客户端与服务端的一种交互方式(REST风格网络接口)
2.0 Restfulapi风格就是把所有的数据当作资源,对表的操作就是对资源的操作
3.0 资源就是指URL,基于url对资源操作,web服务在url上支持一系列请求方法,如下
http方法数据处理说明
POST新增新增一个资源
GET获取获取一个资源
PUT更新更新一个资源
DELETE删除删除一个资源

3.0 通过项目回顾Djiango开发模式

1.熟悉Djiango项目流程创建
2.熟悉Djiango与HTML模版交互
3.熟悉Ajax前后端数据交互
4.熟悉ORM数据交互操作

3.1 创建一个djiango项目

在这里插入图片描述
#创建一个myapp应用

python3  manage.py startapp  myapp

3.2 配置使用mysql数据库

3.2.1 启动一个本地可以连接的mysql数据库

docker run -d --name db  \
--network=host   \
-p 3306:3306 -v  \
mysqldata:/var/lib/mysql  \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7 --character-set-server=utf8

3.2.2 安装pymysql工具

pip install pymysql

3.2.3 修改settins.py配置文件,注释原来的配置
在这里插入图片描述

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '172.16.226.7',
        'PORT': '3306',
    }
}

3.2.4 修改myapp模块下__init__.py配置文件

import pymysql
pymysql.install_as_MySQLdb()

在这里插入图片描述
在这里插入图片描述
3.2.5 创建数据表,并初始化数据
在这里插入图片描述
在这里插入图片描述

 python3  manage.py makemigrations  #生成初始化表sql
 python3  manage.py migrate         #执行初始化表sql

在这里插入图片描述
说明初始化数据库成功

3.3 写入数据测试验证

3.3.1 编写主路由文件
在这里插入图片描述
3.3.2 编写myapp 视图和路由文件

from  django.http import HttpResponse

def user(request):
    if request.method == "GET":
        return HttpResponse("获取用户")
    elif request.method == "POST":
        return HttpResponse("创建用户")
    elif request.method == "PUT":
        return HttpResponse("更新用户")
    elif request.method == "DELETE":
        return HttpResponse("删除用户")

在这里插入图片描述
在这里插入图片描述

from django.contrib import admin
from django.urls import path,include
from .  import views

urlpatterns = [
    path('user/', views.user),
]

验证
在这里插入图片描述

3.4 展示用户

3.4.1 编写视图

from django.shortcuts import render
# Create your views here.
from  django.http import HttpResponse
from .models import User

def user(request):
    if request.method == "GET":
        user_list = User.objects.all()
        return render(request, 'user_list.html',{'user_list': user_list})
    elif request.method == "POST":
        return HttpResponse("创建用户")
    elif request.method == "PUT":
        return HttpResponse("更新用户")
    elif request.method == "DELETE":
        return HttpResponse("删除用户")

在这里插入图片描述
3.4.2 编写html模版文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>列出所有用户</title>
</head>
<body>
<table border="1">
    <thead>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>城市</th>
            <th>性别</th>
            <th>年龄</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
        {% for i in user_list %}
        <tr>
            <td>{{ i.id }}</td>
            <td>{{ i.name }}</td>
            <td>{{ i.city }}</td>
            <td>{{ i.sex }}</td>
            <td>{{ i.age }}</td>
            <td>
                <button>编辑</button>
                <button>删除</button>
            </td>
        </tr>
        {% endfor %}
    </tbody>
</table>
</body>
</html>

在这里插入图片描述
最终实现效果如图

3.5 实现新增用户功能

3.5.1 新增路由

 urlpatterns = [
    path('user/', views.user),
    path('user_add/', views.user_add)
]

3.5.2 新增视图
在这里插入图片描述


def  user_add(request):
    return render(request, 'user_add.html')

def user(request):
    if request.method == "GET":
        user_list = User.objects.all()
        return render(request, 'user_list.html',{'user_list': user_list})
    elif request.method == "POST":
        name = request.POST.get('name')
        city = request.POST.get('city')
        sex = request.POST.get('sex')
        age = request.POST.get('age')
        User.objects.create(
            name=name,
            city=city,
            sex=sex,
            age=age
        )
        return HttpResponse("创建用户成功!")
    elif request.method == "PUT":
        return HttpResponse("更新用户")
    elif request.method == "DELETE":
        return HttpResponse("删除用户")

3.5.3 新增html模版

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>创建用户</title>
</head>
<body>
<form action="/myapp/user/" method="post">
    姓名: <input type="text" name="name"><br>
    城市: <input type="text" name="city"><br>
    性别: <input type="text" name="sex"><br>
    年龄: <input type="text" name="age"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

在这里插入图片描述
3.5.4 验证
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.6删除用户功能

3.6.1 编写视图

from django.shortcuts import render
from  django.http import HttpResponse,QueryDict,JsonResponse
from .models import User

def  user_add(request):
    return render(request, 'user_add.html')

def user(request):
    if request.method == "GET":
        user_list = User.objects.all()
        return render(request, 'user_list.html',{'user_list': user_list})
    elif request.method == "POST":
        name = request.POST.get('name')
        city = request.POST.get('city')
        sex = request.POST.get('sex')
        age = request.POST.get('age')
        User.objects.create(
            name=name,
            city=city,
            sex=sex,
            age=age
        )
        return HttpResponse("创建用户成功!")
    elif request.method == "PUT":
        return HttpResponse("更新用户")
    elif request.method == "DELETE":
        data = QueryDict(request.body) #封装删除函数
        id = data.get('id')
        try:
            User.objects.get(id=id).delete()
            res = {'code': 200, 'msg': '删除用户成功!'}
        except Exception:
            res = {'code': 500, 'msg': '删除用户失败!'}
        return JsonResponse(res)

在这里插入图片描述
3.6.2 编写 html模版

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>列出所有用户</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
<button><a href="/myapp/user_add" target="_blank">创建用户</a> </button>
<table border="1">
    <thead>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>城市</th>
            <th>性别</th>
            <th>年龄</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
        {% for i in user_list %}
        <tr>
            <td>{{ i.id }}</td>
            <td>{{ i.name }}</td>
            <td>{{ i.city }}</td>
            <td>{{ i.sex }}</td>
            <td>{{ i.age }}</td>
            <td>
                <button>编辑</button>
                <button id="del" onclick="delUser(this)">删除</button>
            </td>
        </tr>
        {% endfor %}
    </tbody>
</table>
<script>
    function  delUser(obj) {
        confirm = confirm('是否删除用户?');
        if (confirm) {
            id = $(obj).parent().parent().find("td:eq(0)").text();
            //获取button父元素td,再获取td父元素tr,最后获取tr第一个值
            console.log(id)
            data ={'id':id};
            $.ajax({
                type: 'DELETE',
                url: '/myapp/user/',
                data: data,
                success: function (result) {
                    if(result.code === 200){
                        alert(result.msg);
                        location.reload();
                    } else {
                        alert(result.msg)
                    }
                }
            })
        }
    }
</script>
</body>
</html> 

在这里插入图片描述
新增如图所示部分
3.6.3 展示效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
删除完会自动刷新,删除功能实现完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

八、kubernetes1.25应用升级、回滚

1、概述 用户希望应用程序始终可用&#xff0c;而开发人员则需要每天多次部署它们的新版本。在 Kubernetes 中&#xff0c;这些是通过滚动更新&#xff08;Rolling Updates&#xff09;完成的。 滚动更新 允许通过使用新的实例逐步更新 Pod 实例&#xff0c;零停机进行 Deploym…

Sentinel流控

Sentinel 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 1.sentinel特性 Sentinel 具有以下特征: 丰富的应用场景&#xff1a; Sentinel 承接了…

最优化方法——最小二乘法与梯度下降法

目录 系列文章目录 一、问题 二、实验思路综述 1.实验工具及算法 2.实验数据 3.实验目标 4.实验步骤 三、最小二乘问题引入 1.最小二乘问题样例 2.最小二乘问题解决方案及数学模型化 3.相关线性代数知识导入 3.1 梯度 3.2 矩阵的逆 3.3 QR分解 四、最小二乘法 …

用 ChatGPT 运行 Python

最近&#xff0c;我一直在阅读一些关于ChatGPT的有趣文章。在一篇文章中&#xff0c;有人发明了一种新的语言&#xff0c;并让ChatGPT运行它。在另一篇文章中&#xff0c;有人在ChatGPT中运行一个虚拟机。后者启发我提出了下面这个问题。你能在ChatGPT中运行一个交互式Python会…

【docker常用命令】

一、帮助启动类命令 &#xff08;1&#xff09;启动docker systemctl start docker&#xff08;2&#xff09;停止docker systemctl stop docker&#xff08;3&#xff09;重启docker systemctl restart docker&#xff08;4&#xff09;查看docker状态 systemctl status…

【数据预处理】基于Pandas的数据预处理技术【california_housing加州房价数据集】_后9个任务

文章目录一.需求分析二.需求解决2.1 对第一个特征&#xff08;收入中位数&#xff09;排序后画散点图2.2 对第一个特征&#xff08;收入中位数&#xff09;画分位数图并分析2.3 【选做】对所有特征画分位数图并进行分析2.4 使用线性回归方法拟合第一个特征&#xff08;收入中位…

基于c# asp.net电子病历管理系统的设计与实现

摘 要 网络的广泛应用给生活带来了十分的便利。所以把电子病历管理与现在网络相结合&#xff0c;利用net语言建设电子病历管理系统&#xff0c;实现电子病历管理的信息化。则对于进一步提高医院的发展&#xff0c;丰富电子病历管理经验能起到不少的促进作用。 电子病历管理系统…

AbstractQueueSynchronizer

AbstractQueueSynchronizer AbstractQueueSynchronizer 是基于 FIFO线程等待队列 的一个同步器开发框架。 这篇文章首先介绍同步器概念&#xff0c;然后介绍AQS的结构原理 什么是Synchronizer&#xff08;同步器&#xff09; 并发环境下&#xff0c;Synchronizer用于实现线…

Windows和Mac系统实现本地部署WebPageTest工具

在项目开发或者测试的过程中&#xff0c;由于没有上线&#xff0c;我们在公网上无法访问我们的网站&#xff0c;但同时我们又需要查看浏览器性能&#xff0c;这样我们就需要在本地部署WebPageTest工具以协助进行性能测试 具体实现步骤&#xff1a; Windows系统&#xff1a; …

FFT求多项式乘积

之前在b站上看到了一些介绍FFT的视频 《快速傅里叶变换(FFT)——有史以来最巧妙的算法&#xff1f;》 《这个算法改变了世界》 于是打算写一篇记录一下qwq&#xff08;本博客中的截图基本上来源于第一个视频&#xff09; Fast Fourier Transform 是一种能在O(nlogn)O(nlogn)…

企业营销数字化转型:如何转型、如何选品、如何用好?

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年11月份热门报告盘点2023年&#xff0c;如何科学制定年度规划&#xff1f;《底层逻辑》高清配图清华大学256页PPT元宇宙研究报告.pdf&#xff08;附下载链接&#xff09;…

【LeetCode】1759. 统计同构子字符串的数目

统计同构子字符串的数目 题目描述 给你一个字符串 s &#xff0c;返回 s 中 同构子字符串 的数目。由于答案可能很大&#xff0c;只需返回对 109 7 取余 后的结果。 同构字符串 的定义为&#xff1a;如果一个字符串中的所有字符都相同&#xff0c;那么该字符串就是同构字符串…

自定义报表-FineReport JS实现隐藏Tab页

1. 概述 1.1 问题描述 在实际项目中&#xff0c;使用决策报表的时候&#xff0c;有时会用到在决策报表参数面板获取报表控件的值&#xff0c;那么该如何实现呢&#xff1f; 1.2 实现思路 使用 JS 获取报表主体的控件值&#xff1a; _g().getWidgetByName("area").…

【金猿人物展】数睿数据创始人兼CEO穆鸿:大数据价值创造关键在于应用普惠...

‍穆鸿本文由数睿数据创始人兼CEO穆鸿撰写并投递参与“数据猿年度金猿策划活动——2022大数据产业趋势人物榜单及奖项”评选。‍数据智能产业创新服务媒体——聚焦数智 改变商业事情还得从我2022年这一年经历的一些事情谈起&#xff0c;由于工作的原因&#xff0c;我要经常往返…

Python量化交易04——基于机器学习的交易策略

参考书目:深入浅出Python量化交易实战 学量化肯定要用的上机器学习这种强大的预测技术。本次使用机器学习构建一些简单的预测进行量化交易&#xff0c;使用Python进行回测。 获取数据 import pandas as pd import tushare as ts import numpy as npfrom sklearn.neighbors imp…

线程池设计与实现C

线程池实现 结构设计 先上图&#xff1a; 参数 线程池&#xff1a; 包含一个执行队列、一个任务队列mutex用来在多个线程取任务时锁任务队列&#xff0c;cond用来在任务队列为空时锁任务队列 如线程A锁了任务队列&#xff0c;去取任务时&#xff0c;又发现任务队列为空&…

【C++求解数学题】大圆圈里面三角形个数相等

本文介绍的问题是一道来自于二年级&#xff08;上&#xff09;数学的练习题。 问题 在下图中画8个Δ\DeltaΔ,使每个大圆圈里都有4个Δ\DeltaΔ. 示例&#xff1a; 每个大圆圈里面均有4个Δ\DeltaΔ. 方法 按照“变量-范围-条件”的三段式穷举法解题框架&#xff0c;对…

分布式系列之聊聊Nginx实现原理

Nginx作为开源的轻量级的HTTP服务器&#xff0c;广泛应用于分布式应用架构中。本文简要介绍了Nginx的特点及使用场景、Nginx的进程模型和请求处理流程&#xff0c;并结合不同场景进行配置&#xff0c;对Nginx的架构和实现原理有个初步的了解。 1、Nginx是什么 Nginx&#xff0…

Echarts之甘特图type: ‘custom‘参数详解

甘特图 const groupData XEUtils.groupBy(data, "eqpName"); //分组后的数据 const yAxisData Object.keys(groupData); const seriesData Object.keys(groupData).map((item, index) > {let arr [];groupData[item].forEach((GItem) > {arr.push([index,f…

Graphviz安装向导及入门指南

目录 1、首先在官网下载graphviz 2、安装。 3、测试并在Windows命令行中使用 4、在Python中使用 5、在自带的gvedit.exe 程序中使用 6、在语雀中使用 7、绘制一棵简单的二叉树 8、详细语法介绍 8.1 带标签 8.2 修改方框颜色和形状 8.3子视图 8.4 结构视图 8.5 …