利用Django实现MySQL数据库的内容在网页的增删改写

利用Django实现MySQL数据库的内容在网页的增删改写

  • 1.建立项目
  • 2.定义模型
  • 3.创建视图
  • 4.创建模板
  • 5.创建表单和配置url
  • 6.最后修改
  • 7.效果

1.建立项目

输入命令django-admin startproject aaa 新建项目,项目名称命名为aaa,打开aaa文件夹,命令提示符输入python manage.py startapp TestModel新建名为TestModel的应用,接下来所有操作几乎都是在aaa/TestModel这个文件夹里完成

环境配置,python = 3.8.6

ansicon                 1.89.0
arrow                   1.2.3
asgiref                 3.7.2
async-timeout           4.0.2
autopep8                1.7.0
backports.zoneinfo      0.2.1
bcrypt                  3.2.0
beautifulsoup4          4.10.0
blessed                 1.19.1
certifi                 2021.10.8
cffi                    1.15.0
charset-normalizer      2.0.12
click                   8.1.3
colorama                0.4.6
concurrent-log-handler  0.9.24
contourpy               1.0.5
coverage                7.4.0
cryptography            37.0.0
cycler                  0.11.0
decorator               5.1.1
Deprecated              1.2.13
Django                  3.2.12
django-bootstrap3       21.2
django-cors-headers     3.13.0
django-crontab          0.7.1
django-filter           21.1
django-htmx             1.17.2
django-multiselectfield 0.1.12
django-picklefield      3.1
django-q                1.3.9
django-redis            5.2.0
django-silk             5.0.1
djangorestframework     3.13.1
dnspython               2.2.1
et-xmlfile              1.1.0
exceptiongroup          1.2.0
fonttools               4.37.3
func_timeout            4.3.5
gprof2dot               2022.7.29
greenlet                1.1.2
hikpi-backend-atvipc    0.1.7
hikpi-backend-isapi     0.11.0
hikpi-backend-networks  1.0
hikpi-hikrequest        0.6
hikpi-krapi             1.0.1
hikpi-univice-api       0.4
hiredis                 2.0.0
idna                    3.3
importlib-metadata      4.11.3
influxdb                5.3.1
iniconfig               2.0.0
install                 1.3.5
iso8601                 1.0.2
jedi                    0.18.1
Jinja2                  3.1.2
jinxed                  1.3.0
kiwisolver              1.4.4
loguru                  0.6.0
Markdown                3.3.6
MarkupSafe              2.1.1
matplotlib              3.6.0
mongoengine             0.24.2
msgpack                 1.0.8
mysql-connector         2.2.9
mysql-connector-python  8.0.21
mysqlclient             2.2.4
ntplib                  0.4.0
numpy                   1.23.3
openpyxl                3.0.9
packaging               21.3
pandas                  2.0.3
paramiko                2.10.4
parso                   0.8.3
Pillow                  9.2.0
pip                     24.2
pluggy                  1.3.0
portalocker             2.7.0
prometheus-writer       0.1.2
protobuf                3.15.0
psycopg2                2.9.5
py                      1.11.0
pycodestyle             2.9.1
pycparser               2.21
pycryptodome            3.20.0
pymongo                 4.3.2
PyMySQL                 1.0.2
PyNaCl                  1.5.0
pyparsing               3.0.8
PySocks                 1.7.1
pytest                  7.4.4
pytest-cov              4.1.0
python-dateutil         2.8.2
python-dotenv           0.20.0
python-snappy           0.6.1
pythonping              1.1.4
pytz                    2021.3
pywin32                 306
redis                   3.5.3
requests                2.31.0
requests-toolbelt       0.9.1
retry                   0.9.2
retrying                1.3.4
robotframework          5.0.1
ruff                    0.0.261
schedule                1.2.1
setuptools              49.2.1
six                     1.16.0
soupsieve               2.3.1
SQLAlchemy              2.0.23
sqlparse                0.4.2
tabulate                0.9.0
taos-ws-py              0.3.2
taospy                  2.7.12
toml                    0.10.2
tomli                   2.0.1
tqdm                    4.64.1
typing_extensions       4.8.0
tzdata                  2023.3
urllib3                 1.26.9
wcwidth                 0.2.5
win32-setctime          1.1.0
wrapt                   1.14.0
xmltodict               0.12.0
zipp                    3.8.0

2.定义模型

路径:aaa/TestModel/models.py,类名就是将要新建立的表的名称,最终数据中生成的表的名称为app名称_类名

# 定义一个 Staff 模型,它将对应数据库中的职工信息表
from django.db import models
class Staff(models.Model):name = models.CharField(max_length=100)position = models.CharField(max_length=100)department = models.CharField(max_length=100)hire_date = models.DateField()def __str__(self):return self.name

数据库迁移

python manage.py makemigrations TestModel
python manage.py migrate TestModel

创建数据表
创建一个名为runoob的数据库,在数据库创建一个名为TestModel的数据表,具体可自行百度,创建好了之后是这样子的

mysql> use runoob;
Database changed
mysql> show tables;
+----------------------------+
| Tables_in_runoob           |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| runoob_tbl                 |
| runoob_tbl1                |
| testmodel_staff            |
+----------------------------+

3.创建视图

路径:aaa/TestModel/views.py

# 创建视图用于展示、添加、修改和删除职工信息:
from django.shortcuts import render, get_object_or_404, redirect
from .models import Staff
from .forms import StaffFormdef staff_list(request):staffs = Staff.objects.all()return render(request, 'staff/staff_list.html', {'staffs': staffs})def staff_detail(request, pk):staff = get_object_or_404(Staff, pk=pk)return render(request, 'staff/staff_detail.html', {'staff': staff})def staff_new(request):if request.method == "POST":form = StaffForm(request.POST)if form.is_valid():staff = form.save(commit=False)staff.save()return redirect('staff_list')else:form = StaffForm()return render(request, 'staff/staff_new.html', {'form': form})def staff_edit(request, pk):staff = get_object_or_404(Staff, pk=pk)if request.method == "POST":form = StaffForm(request.POST, instance=staff)if form.is_valid():form.save()return redirect('staff_list')else:form = StaffForm(instance=staff)return render(request, 'staff/staff_edit.html', {'form': form})def staff_delete(request, pk):staff = get_object_or_404(Staff, pk=pk)if request.method == "POST":staff.delete()return redirect('staff_list')return render(request, 'staff/staff_delete.html', {'staff': staff})

4.创建模板

主界面,路径:aaa/TestModel/templates/staff/staff_list.html

<style>table {border-collapse: collapse;}table, th, td {border: 1px solid black;}
</style>
{% block content %}<h1>职工信息列表</h1><a href="{% url 'staff_new' %}">新增职工</a><table ><thead><tr><th>姓名</th><th>职位</th><th>部门</th><th>入职日期</th><th>操作</th></tr></thead><tbody>{% for staff in staffs %}<tr><td>{{ staff.name }}</td><td>{{ staff.position }}</td><td>{{ staff.department }}</td><td>{{ staff.hire_date|date:"Y-m-d" }}</td><td><a href="{% url 'staff_detail' staff.pk %}">详情</a><a href="{% url 'staff_edit' staff.pk %}">编辑</a><a href="{% url 'staff_delete' staff.pk %}">删除</a></td></tr>{% empty %}<tr><td colspan="5">没有找到相应记录</td></tr>{% endfor %}</tbody></table>
{% endblock %}

详情界面,路径:aaa/TestModel/templates/staff/staff_detail.html

{% block title %}职工详情 - {{ staff.name }}{% endblock %}{% block content %}<h1>{{ staff.name }} 的详细信息</h1><p><strong>职位:</strong> {{ staff.position }}</p><p><strong>部门:</strong> {{ staff.department }}</p><p><strong>入职日期:</strong> {{ staff.hire_date|date:"Y-m-d" }}</p><a href="{% url 'staff_list' %}">返回职工列表</a>
{% endblock %}

新增界面,路径:aaa/TestModel/templates/staff/staff_new.html

{% block content %}
<h1>新增员工信息</h1>
<form method="post">{% csrf_token %}{{ form.as_p }}<button type="submit">提交</button>
</form>{% endblock %}

编辑修改界面,路径:aaa/TestModel/templates/staff/staff_edit.html

{% block content %}<h1>员工信息表单</h1><form method="post">{% csrf_token %}{{ form.as_p }}<button type="submit">提交</button></form>
{% endblock %}

删除界面,路径:aaa/TestModel/templates/staff/staff_delete.html

{% block content %}<h1>确认删除</h1><p>你确定要删除员工 <strong>{{ employee.name }}</strong> 吗?</p><form method="post">{% csrf_token %}<button type="submit" class="delete-button">确认删除</button><a href="{% url 'staff_list' %}" class="cancel-button">取消</a></form>
{% endblock %}

5.创建表单和配置url

创建表单
路径:aaa/TestModel/forms.py

from django import forms
from .models import Staff
class StaffForm(forms.ModelForm):class Meta:model = Stafffields = ('name', 'position', 'department', 'hire_date')

配置url
路径:aaa/TestModel/urls.py

from django.urls import path
from django.contrib import admin
from . import views
urlpatterns = [path('', views.staff_list, name='staff_list'),path('admin/', admin.site.urls),path('staff/<int:pk>/', views.staff_detail, name='staff_detail'),path('staff/new/', views.staff_new, name='staff_new'),path('staff/<int:pk>/edit/', views.staff_edit, name='staff_edit'),path('staff/<int:pk>/delete/', views.staff_delete, name='staff_delete'),
]

6.最后修改

配置应用,路径:aaa/TestModel/apps.py

from django.apps import AppConfig
class TestmodelConfig(AppConfig):default_auto_field = 'django.db.models.BigAutoField'name = 'TestModel'

修改项目url,而不是应用url,路径:aaa/urls.py

from django.urls import path, include
from . import views
urlpatterns = [path('', views.hello),path('staff/', include('TestModel.urls')),
]

修改项目设置,路径:aaa/settings.py

"""
Django settings for aaa project.Generated by 'django-admin startproject' using Django 3.2.12.For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""
import os
from pathlib import Path# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-^1ld4@-ti^qgd#p^rcdv1dj628bk@x%ima3e8a!n&kavpq!+06'# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = TrueALLOWED_HOSTS = []# Application definitionINSTALLED_APPS = ['django.contrib.admin',    # admin管理后台站点'django.contrib.auth',     # 身份认证系统'django.contrib.contenttypes',   # 内容类型框架'django.contrib.sessions',   # 会话框架'django.contrib.messages',   # 消息框架'django.contrib.staticfiles',    # 静态文件管理框架'TestModel',  # 添加此项
]MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]ROOT_URLCONF = 'aaa.urls'TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],       # 修改位置'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]WSGI_APPLICATION = 'aaa.wsgi.application'# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': BASE_DIR / 'db.sqlite3',
#     }
# }
DATABASES = {'default':{'ENGINE': 'django.db.backends.mysql',    # 数据库引擎'NAME': 'runoob', # 数据库名称'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1'PORT': 3306, # 端口'USER': 'root',  # 数据库用户名'PASSWORD': 'Dcx0417*', # 数据库密码}
}# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
]# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/LANGUAGE_CODE = 'en-us'# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/STATIC_URL = '/static/'# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-fieldDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'########################################################################################################STATIC_URL = '/static/' # 别名
STATICFILES_DIRS = [os.path.join(BASE_DIR, "statics"),
]

7.效果

总目录
请添加图片描述

输入运行命令:Python manage.py runserver
打开网址:http://127.0.0.1:8000/staff/
主界面
请添加图片描述
详情界面
请添加图片描述
编辑界面
请添加图片描述
删除界面
请添加图片描述
新增界面
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Puppeteer 与浏览器版本兼容性:自动化测试的最佳实践

Puppeteer 支持的浏览器版本映射&#xff1a;从 v20.0.0 到 v23.6.0 自 Puppeteer v20.0.0 起&#xff0c;这个强大的自动化库开始支持与 Chrome 浏览器的无头模式和有头模式共享相同代码路径&#xff0c;为自动化测试带来了更多便利。从 v23.0.0 开始&#xff0c;Puppeteer 进…

大白话讲解分布式事务-SEATA事务四种模式(内含demo)

因为这里主要是讲解分布式事务&#xff0c;关于什么是事务&#xff0c;以及事务的特性&#xff0c;单个事务的使用方式&#xff0c;以及在Spring框架下&#xff0c;事务的传播方式&#xff0c;这里就不再赘述了。但是我这里要补充一点就是&#xff0c;一提到事务大家脑子里第一…

【LLM论文日更 | 一种引入上下文的文档嵌入方法 】

论文&#xff1a;​​​​​​​https://arxiv.org/pdf/2410.02525代码&#xff1a;暂未开源机构&#xff1a;康奈尔大学领域&#xff1a;embedding model发表&#xff1a;arxiv 研究背景 研究问题&#xff1a;这篇文章要解决的问题是如何改进文档嵌入&#xff0c;使其在特定上…

短短一年多,ChatGPT 发展到什么程序了?

短短一年多&#xff0c;ChatGPT 就与 Google、Youtube、X.com等大佬级网站比肩。成为全球访问量最大的网站之一 爆发期&#xff0c;访问量月增长率高达3000%左右。网站流量从1800万次访问激增至6.72亿次只花了60来天。 2023年一项AI产品访问量统计结果中ChatGPT占比60%&#xf…

信号反射与振铃

反射来源于阻抗不匹配&#xff0c;振铃就是多次反射 对于反射要记住传输系数与反射系数 传输系数与反射系数 振铃现象计算说明

Python轴承故障诊断 (15)基于CNN-Transformer的一维故障信号识别模型

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…

Spark原理

主要包括&#xff1a; 核心组件的运行机制&#xff08;Master&#xff0c;Worker&#xff0c;SparkContext等&#xff09;任务调度的原理Shuffile的原理内存管理数据倾斜处理Spark优化 核心组件的运行机制 Spark 执行任务的原理&#xff1a; Spark on Yarn: Cluster模型&am…

【数据结构-邻项消除】力扣1003. 检查替换后的词是否有效

给你一个字符串 s &#xff0c;请你判断它是否 有效 。 字符串 s 有效 需要满足&#xff1a;假设开始有一个空字符串 t “” &#xff0c;你可以执行 任意次 下述操作将 t 转换为 s &#xff1a; 将字符串 “abc” 插入到 t 中的任意位置。形式上&#xff0c;t 变为 tleft “…

GPT-4o 和 GPT-4 Turbo 模型之间的对比

GPT-4o 和 GPT-4 Turbo 之间的对比 备注 要弄 AI &#xff0c;不同模型之间的对比就比较重要。 GPT-4o 是 GPT-4 Turbo 的升级版本&#xff0c;能够提供比 GPT-4 Turbo 更多的内容和信息&#xff0c;但成功相对来说更高一些。 第三方引用 在 2024 年 5 月 13 日&#xff0…

115页PPT华为管理变革:制度创新与文化塑造的核心实践

集成供应链&#xff08;ISC&#xff09;体系 集成供应链&#xff08;ISC&#xff09;体系是英文Integrated Supply Chain的缩写&#xff0c;是一种先进的管理思想&#xff0c;它指的是由相互间提供原材料、零部件、产品和服务的供应商、合作商、制造商、分销商、零售商、顾客等…

TCP simultaneous open测试

源代码 /*************************************************************************> File Name: common.h> Author: hsz> Brief:> Created Time: 2024年10月23日 星期三 09时47分51秒**********************************************************************…

ctfshow(175->178)--SQL注入--联合注入及其过滤

Web175 进入界面&#xff1a; 审计&#xff1a; 查询语句&#xff1a; $sql "select username,password from ctfshow_user5 where username !flag and id ".$_GET[id]." limit 1;";返回逻辑&#xff1a; if(!preg_match(/[\x00-\x7f]/i, json_enc…

可编辑PPT | 柔性制造企业数字化转型与智能工厂建设方案

这份PPT介绍了柔性制造企业在数字化转型和智能工厂建设方面的综合方案。探讨了数据采集、数字孪生、无码开发支撑、数据资产和应用能力层的构建&#xff0c;以及企业信息化的新思路。最终目标是通过这些技术和策略&#xff0c;实现供应链协同、产品全生命周期管理、绿色节能生产…

VUE, element-plus, table分页表格列增加下拉筛选多选框,请求后台

简介 为了方便表格查询时可以筛选列的值&#xff0c;需要给列增加筛选框&#xff08;多选框&#xff09;&#xff0c;element-plus提供了列的filter字段&#xff0c;但是基于表格数据的筛选&#xff0c;不会重新请求后台&#xff0c;而且当前表格数据有多少个条目&#xff0c;…

WPF+MVVM案例实战(一)- 设备状态LED灯变化实现

文章目录 1、项目创建2、UI界面布局1. MainWindow.xaml2、颜色转换器实现2.MainViewModel.cs 代码实现 3、运行效果4.源代码下载 1、项目创建 打开 VS2022 &#xff0c;新建项目 Wpf_Examples&#xff0c;创建各层级文件夹&#xff0c;安装 CommunityToolkit.Mvvm 和 Microsof…

python实现投影仪自动对焦

这是一款投影仪,它带有对焦摄像头 它是如何自动对焦的呢? 我们先看一下对焦算法展示效果 说明:左侧是原视频,右侧是对调焦后的视频帧展示,如果下一帧视频比当前帧清晰就会显示下一帧,否则,还是显示当前帧,直至找到更清晰的帧 原理说明: 在投影仪上对焦摄像头就会实…

HelloCTF [RCE-labs] Level 4 - SHELL 运算符

开启靶场&#xff0c;打开链接&#xff1a; 源码很简单&#xff0c;system("ping -c 1 $ip"); GET传参ip 构造payload&#xff1a; /?ip127.0.0.1;ls / /?ip127.0.0.1;cat /flag 成功得到flag&#xff1a; NSSCTF{04ad1d48-4530-481d-aa5d-8a153b0ebf2c}

常见学习陷阱及解决方案

文章目录 1. 拖延2. 信息过载3. 缺乏计划4. 过度依赖记忆5. 缺乏反馈6. 学习环境不佳7. 不够自信8. 不适合的学习方法结论 在学习过程中&#xff0c;学生常常会遇到各种陷阱&#xff0c;这些陷阱可能会影响学习效果和动机。以下是一些常见的学习陷阱及其解决方案&#xff1a; 1…

软硬链接_动静态库

软硬链接 软链接创建 硬链接创建 软链接是独立文件&#xff08;独立inode号&#xff09; 硬链接不是独立文件&#xff08;inode和目标相同&#xff09; 如何理解软硬链接 软链接有独立inode&#xff0c;软链接内容上&#xff0c;保存的是文件路径 硬链接不是独立文件&#xf…

服务器虚拟化全面教程:从入门到实践

服务器虚拟化全面教程&#xff1a;从入门到实践 引言 在现代 IT 基础设施中&#xff0c;服务器虚拟化已成为一种不可或缺的技术。它不仅能够提高资源利用率&#xff0c;还能降低硬件成本&#xff0c;优化管理流程。本文将深入探讨服务器虚拟化的概念、技术、应用场景及其实现…