Django学习第六天
启动项目命令
python manage.py runserver
取消模态框功能

js实现列表数据删除

第二种实现思路

使用jquery修改模态框标题

编辑页面拿到数据库数据显示默认数据功能实现

想要去数据库中获取数据时:对象/字典


三种不同的数据类型

使用Ajax传入数据实现表单编辑,删除,修改功能
order1.py
import json
import randomfrom django.shortcuts import render
from django.http import JsonResponse, HttpResponse
from app01 import models
from app01.utils.bootstrap import BootStrapModelForm
from django.views.decorators.csrf import csrf_exempt
from datetime import datetime
from app01.utils.pagination import Paginationclass OrderModelForm(BootStrapModelForm):class Meta:model = models.Order# field = "__all__"# fields = [""]exclude = ["oid", "admin"]def order_list(request):queryset = models.Order.objects.all().order_by('-id')page_object = Pagination(request, queryset)form = OrderModelForm()context = {'form': form,'queryset': page_object.page_queryset,'page_string': page_object.html()}return render(request, 'order_list.html', context)@csrf_exempt
def order_add(request):""" 新建订单 (Ajax请求)"""form = OrderModelForm(data=request.POST)if form.is_valid():# 额外增加一些不是用户输入的值(自己计算值)form.instance.oid = datetime.now().strftime("%Y%m%d%H%M%S") + str(random.randint(1000, 9999))# 固定设置管理员ID# form.instance.admin = 当前登录系统管理员的ID# keys = list(request.session.keys())# print(keys)form.instance.admin_id = request.session["info"]["id"]# 保存到数据库中form.save()return JsonResponse({"status": True})# return HttpResponse(json.dumps({"status": True}))return JsonResponse({"status": False, 'error': form.errors})def order_delete(request):""" 删除订单 """uid = request.GET.get("uid")exists = models.Order.objects.filter(id=uid).exists()if not exists:return JsonResponse({"status": True, 'error': "删除失败,数据不存在"})models.Order.objects.filter(id=uid).delete()return JsonResponse({"status": True})def order_detail(request):""" 根据ID获取订单明细 """# 方式1# uid = request.GET.get("uid")# row_object = models.Order.objects.filter(id=uid).first()# if not row_object:# return JsonResponse({"status": False, 'error': "数据不存在,"})## # 从数据库中获取到一个对象 row_object# result = {# "status": True,# "data": {# "title": row_object.title,# "price": row_object.price,# "status": row_object.status,# }# }# return JsonResponse({"status": True, "data": result})# 方式2uid = request.GET.get("uid")row_dict = models.Order.objects.filter(id=uid).values("title", "price", "status").first()if not row_dict:return JsonResponse({"status": False, "error": "数据不存在。"})# 从数据库中获取到一个对象 row_objectresult = {"status": True,"data": row_dict}return JsonResponse(result)@csrf_exempt
def order_edit(request):""" 编辑订单 """uid = request.GET.get("uid")row_object = models.Order.objects.filter(id=uid).first()if not row_object:return JsonResponse({"status": False, "tips": "数据不存在。"})form = OrderModelForm(data=request.POST, instance=row_object)if form.is_valid():form.save()return JsonResponse({"status": True})return JsonResponse({"status": False, "error": form.errors})
order_list.html
{% extends 'layout.html' %}{% block content %}
<div class="container"><div style="margin-bottom: 10px"><input type="button" value="新建订单1" class="btn btn-primary" data-toggle="modal" data-target="#myModal"><input id="btnAdd" type="button" value="新建订单2" class="btn btn-primary"></div><div class="panel panel-default"><!-- Default panel contents --><div class="panel-heading"><span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>订单列表</div><!-- Table --><table class="table table-bordered"><thead><tr><th>ID</th><th>订单号</th><th>名称</th><th>价格</th><th>状态</th><th>管理员</th><th>操作</th></tr></thead><tbody>{% for obj in queryset %}<tr uid="{{ obj.id }}"><th>{{ obj.id }}</th><td>{{ obj.oid }}</td><td>{{ obj.title }}</td><td>{{ obj.price }}</td><td>{{ obj.get_status_display }}</td><td>{{ obj.admin.username }}</td><td><input uid="{{ obj.id }}" type="button" class="btn btn-primary btn-xs btn-edit" value="编辑"><input uid="{{ obj.id }}" class="btn btn-danger btn-xs btn-delete" type="button" value="删除"></td></tr>{% endfor %}</tbody></table></div><div class="clearfix"><ul class="pagination" style="float:left;">{{ page_string }}</ul></div>
</div><!-- 新建/编辑 订单(对话框) -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="myModalLabel">新建</h4></div><div class="modal-body"><form id="formAdd"><div class="clearfix">{% for field in form %}<div class="col-xs-6"><div class="form-group" style="position: relative;margin-bottom: 20px;"><label>{{ field.label }}</label>{{ field }}<span class="error-msg" style="color: red; position: absolute"></span></div></div>{% endfor %}</div></form></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">取 消</button><button id="btnSave" type="button" class="btn btn-primary">保 存</button></div></div></div>
</div><!--删除-->
<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"><div class="modal-dialog" role="document"><div class="alert alert-danger alert-dismissible fade in" role="alert"><h4>是否确定删除?</h4><p style="margin: 10px 0;">删除后可能会出现不一样的问题</p><p style="text-align: right;"><button id="btnConfirmDelete" type="button" class="btn btn-danger">确 定</button><button type="button" class="btn btn-default" data-dismiss="modal">取 消</button></p></div></div>
</div>
{% endblock %}{% block js %}
<script type="text/javascript">var DELETE_ID;var EDIT_ID;$(function () {bindBtnAddEvent();bindBtnSaveEvent();bindBtnDeleteEvent();bindBtnConfirmDeleteEvent();bindBtnEditEvent();})function bindBtnAddEvent() {$("#btnAdd").click(function () {//将正在编辑的ID设置为空EDIT_ID = undefined;//清空对话框中的数据$("#formAdd")[0].reset();//设置对话框的标题$("#myModalLabel").text("新建");//点击新建按钮,显示对话框$('#myModal').modal('show')});}function bindBtnSaveEvent() {$("#btnSave").click(function() {// 清除错误信息$("#error-msg").empty();if(EDIT_ID) {//编辑doEdit();} else {//添加doAdd();}});}function doEdit() {// 向后台发送请求$.ajax({url: "/order/edit/" + "?uid=" + EDIT_ID,type: "post",data: $("#formAdd").serialize(),dataType: "JSON",success: function (res) {if(res.status) {alert("修改成功");// 清空表单$("#formAdd")[0].reset();//关闭对话框$('#myModal').modal('hide');location.reload();} else {if (res.tips) {alert(res.tips);} else {$.each(res.error, function (name, errorList) {$("#id_" + name).next().text(errorList[0]);})}}}});}function doAdd() {// 向后台发送请求$.ajax({url: "/order/add/",type: "post",data: $("#formAdd").serialize(),dataType: "JSON",success: function (res) {if(res.status) {alert("创建成功");// 清空表单$("#formAdd")[0].reset();//关闭对话框$('#myModal').modal('hide');location.reload();} else {$.each(res.error, function (name, errorList) {$("#id_" + name).next().text(errorList[0]);})}}});}function bindBtnDeleteEvent() {$(".btn-delete").click(function() {//alert("点击了删除");$("#deleteModal").modal('show');//获取当前行的ID并赋值给全部变量DELETE_ID = $(this).attr("uid")});}function bindBtnConfirmDeleteEvent() {$("#btnConfirmDelete").click(function () {//点击确认删除按钮,将全局变量中设置的那个要删除ID发送到后台$.ajax({url: "/order/delete/",type: "GET",data: {uid: DELETE_ID},dataType: "JSON",success: function (res) {if(res.status){
<!-- //alert("删除成功");-->
<!-- //隐藏删除框-->
<!-- $("deleteModal").modal('hide');-->
<!-- //在页面上将当前一行数据删除(js)-->
<!-- $("tr[uid='" + DELETE_ID + "']").remove();-->
<!-- //要删除的ID置空-->
<!-- DELETE_ID = 0;-->//简单的实现思路location.reload();}else{//删除失败alert(res.error);}}})});}function bindBtnEditEvent() {$(".btn-edit").click(function () {//清空对话框中的数据$("#formAdd")[0].reset();var uid = $(this).attr("uid");EDIT_ID = uid;//发送Ajax去后端获取当前行的相关数据$.ajax({url: "/order/detail/",type: "get",data:{uid:uid},dataType:"JSON",success: function (res) {if(res.status) {//将数据赋值到对话框中的标签中$.each(res.data, function (name, value) {$("#id_" + name).val(value);})//修改对话框的标题$("#myModalLabel").text("编辑");//点击编辑,显示对话框$("#myModal").modal('show');} else {alert(res.error);}}})});}
</script>
{% endblock %}
导入echarts图表
出现图表加载不出来的问题
可能是
<script src="https://cdn.jsdelivr.net/npm/echarts@5.5.1/dist/echarts.min.js"></script>
放在了
<script type="text/javascript">// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('m1'));// 指定图表的配置项和数据var option = {title: {text: 'ECharts 入门示例'},tooltip: {},legend: {data: ['销量']},xAxis: {data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']},yAxis: {},series: [{name: '销量',type: 'bar',data: [5, 20, 36, 10, 10, 20]}]};// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);
的后面了
相关文章:
Django学习第六天
启动项目命令 python manage.py runserver 取消模态框功能 js实现列表数据删除 第二种实现思路 使用jquery修改模态框标题 编辑页面拿到数据库数据显示默认数据功能实现 想要去数据库中获取数据时:对象/字典 三种不同的数据类型 使用Ajax传入数据实现表单编辑&…...
docker部署mycat,连接上面一篇的一主二从mysql
一、docker下载mycat镜像 查看安装结果 这个名称太长,在安装容器时不方便操作,设置标签为mycat docker tag longhronshens/mycat-docker mycat 二、安装容器 先安装一个,主要目的是获得配置文件 docker run -it -d --name mycat -p 8066:…...
VUE2拖拽组件:vue-draggable-resizable-gorkys
vue-draggable-resizable-gorkys组件基于vue-draggable-resizable进行二次开发, 用于可调整大小和可拖动元素的组件并支持冲突检测、元素吸附、元素对齐、辅助线 安装: npm install --save vue-draggable-resizable-gorkys 全局引用: import Vue from vue import vdr fro…...
容器:stack
以下是关于stack容器的一些总结: stack容器比较简单,主要包括: 1、构造函数:stack [staName] 2、添加、删除元素: push() 、pop() 3、获取栈顶元素:top() 4、获取栈的大小:size() 5、判断栈是否为空&#x…...
跨平台Ribbon UI组件QtitanRibbon全新发布v6.7.0——支持Qt 6.6.3
没有Microsoft在其办公解决方案中提供的界面,就无法想象现代应用程序,这个概念称为Ribbon UI,目前它是使应用程序与时俱进的主要属性。QtitanRibbon是一款遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,QtitanRibb…...
(6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
目录 前言1. DataFrame 简介2. DataFrame的特点3. DataFrame的创建3.1 使用字典创建DataFrame3.2 使用列表的列表(或元组)创建DataFrame3.3 使用NumPy数组创建DataFrame3.4 使用Series构成的字典创建DataFrame3.5 使用字典构成的字典创建DataFrame 4. 从…...
在 Azure 云中开始使用适用于 Ubuntu 的 Grafana
介绍 Grafana 是一款开源工具,可用于可视化和分析数据。它特别适合跟踪计算机系统的运行情况。在构建微服务或其他类型的应用程序时,您可能需要分析日志数据、轻松可视化数据或设置特殊警报以接收有关系统中发生的某些事件的通知。 这就是为什么你可能…...
1.Python学习笔记
一、环境配置 1.Python解释器 把程序员用编程语言编写的程序,翻译成计算机可以执行的机器语言 安装: 双击Python3.7.0-选择自定义安装【Customize installation】-勾选配置环境变量 如果没有勾选配置环境变量,输入python就会提示找不到命令…...
中英双语介绍百老汇著名歌剧:《猫》(Cats)和《剧院魅影》(The Phantom of the Opera)
中文版 百老汇著名歌剧 百老汇(Broadway)是世界著名的剧院区,位于美国纽约市曼哈顿。这里汇集了许多著名的音乐剧和歌剧,吸引了全球各地的观众。以下是两部百老汇的经典音乐剧:《猫》和《剧院魅影》的详细介绍。 1.…...
RpcChannel的调用过程
目录 1. RPC调用方(caller)的调用(消费)过程 2.在caller下创建文件:calluserservice.cc 3.在src的include下创建文件:mprpcchannel.h 4.在src下创建mprpcchannel.cc 1. RPC调用方(caller)的调用(消费)过…...
东芝TB6560AHQ/AFG步进电机驱动IC:解锁卓越的电机控制性能
作为一名工程师,一直在寻找可靠且高效的组件来应用于你的项目中。东芝的TB6560AHQ/AFG步进电机驱动IC能够提供精准且多功能的电机控制,完全符合现代应用的高要求,保证高性能和易用性。在这篇文章中,我们将探讨TB6560AHQ/AFG的主要…...
免杀笔记 ----> DLL注入
这段时间我们暂时没什么事情干的话我们就继续更新我们的免杀笔记力!!! :今天我们讲DLL注入 目录 1.DLL注入 2.直接加载DLL? 3.远程线程注入 获取Handle 远程申请内存空间 将我们的CS的DLL加载入内存 创建远程线…...
奇迹MU 骷髅战士在哪
BOSS分布图介绍 我为大家带来各地区怪物分布图。在游戏前期,很多玩家可能会不知道该去哪里寻找怪物,也不知道哪些怪物值得打。如果选择了太强的怪物,弱小的玩家可能会无法抵御攻击。如果选择了低等级的boss,收益可能并不理想。所…...
leetcode力扣_贪心思想
455.分发饼干(easy-自己想得出来并写好) 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺…...
Vue中Class数据绑定
Class数据绑定 数据绑定的一个常见需求场景是操作CSS class列表,因为class是attribute(属性),我们可以和其他attribute一样使用v-bind 将它们和动态的字符串绑定。但是,在处理比较复杂的绑定时,通过拼接生…...
Python数据分析案例49——基于机器学习的垃圾邮件分类系统构建(朴素贝叶斯,支持向量机)
案例背景 trec06c是非常经典的邮件分类的数据,还是难能可贵的中文数据集。 这个数据集从一堆txt压缩包里面提取出来整理为excel文件还真不容不易,肯定要做一下文本分类。 虽然现在文本分类基本都是深度学习了,但是传统的机器学习也能做。本案…...
贪心算法-以学籍管理系统为例
1.贪心算法介绍 1.算法思路 贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一 步都要确保能获得局部最优解。每一步只考虑一 个数据,其选取应该满足局部优化的条件。若下 一个数据和部分最优解连在一起…...
PyCharm 安装
PyCharm是一种流行的Python集成开发环境(IDE),由JetBrains公司开发。它提供了丰富的功能,如智能代码补全、实时错误检查、项目导航、调试工具以及版本控制等,极大地提高了Python开发人员的工作效率。以下是PyCharm安装…...
C++:对象指针访问成员函数
使用箭头操作符 (->):ptr->function() 是最常用和推荐的方式,因为它更简洁、更直观。箭头操作符 (->) 被设计为与点操作符 (.) 配合指针一起使用,以便通过指针访问对象的成员。 先解引用指针,然后使用点操作符 (.)&…...
Linux 防火墙配置指南:firewalld 端口管理应用案例(二十个实列)
🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧🐧Linux高级管理专栏:点击! 🔐Linux中firewalld防火墙:点击! ⏰️…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
