这是一个简单的django admin 管理后台,这个应用案例主要是给运营人员进行填写数据

主要功能包括:

上传图片功能【选择上传时可以预览】【替换已有数据中的图片时可以预览新旧图片】

每条数据都将会记录操作历史。记录操作人是谁?修改内容是什么?并且定位责任到某一员。

这里的配置符合
可维护性、可扩展性以及数据库的性能,同时确保满足运营人员的需求。
Django 框架的最佳实践以及网站运营的实际场景。

列表展示页面

在这里插入图片描述

每条数据的修改历史记录页面

在这里插入图片描述

添加新数据时的页面

在这里插入图片描述

修改已有数据时的页面

在这里插入图片描述

1:包含文件

/home/luichun/lc/Pyfile/Pywebback/app/websitecontent/models.py
/home/luichun/lc/Pyfile/Pywebback/app/websitecontent/admin.py
/home/luichun/lc/Pyfile/Pywebback/app/websitecontent/apps.py
/home/luichun/lc/Pyfile/Pywebback/app/app/settings.py
/home/luichun/lc/Pyfile/Pywebback/app/websitecontent/templatetags/websitecontent_extras.py
/home/luichun/lc/Pyfile/Pywebback/app/websitecontent/templates/websitecontent/admin/test2.html
/home/luichun/lc/Pyfile/Pywebback/app/static/admin/css/websitecontent_image_preview.css
/home/luichun/lc/Pyfile/Pywebback/app/static/admin/js/websitecontent1_image_preview.js

/home/luichun/lc/Pyfile/Pywebback/app/websitecontent/models.py


# import os
# 因为需要上传【图片】【视频】【其它文件】,所以需要导入 os 模块 来处理文件路径# from datetime import datetime
# 需要导入 datetime 模块 来处理文件的时间from django.db import modelsfrom django.core.exceptions import ValidationError
#--功能1--添加验证文件大小功能,限制上传文件的大小from django.core.validators import FileExtensionValidator,URLValidator
#--功能2--添加验证文件类型功能,限制上传文件的类型--适用字段【image6】
# from django.core.validators import URLValidator
#--功能3--添加验证文件大小功能,限制上传文件的大小from django.conf import settings
# 引用 settings.AUTH_USER_MODEL 用于外键字段(created_by, updated_by)。from django.utils.translation import gettext_lazy as _# 【添加历史操作记录1】
# 导入 simple_history 的 HistoricalRecords
from simple_history.models import HistoricalRecords#--功能1--【代码块1】添加验证文件大小功能,限制上传文件的大小
def validate_file_size(value):filesize = value.sizeif filesize > 20971520:  # 限制文件大小为20MBraise ValidationError(_("最大文件大小为20MB"))
#--功能1--【代码块1】添加验证文件大小功能,限制上传文件的大小# 设置上传图片的过滤条件变量,供后续 image1--image6 字段使用
IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif']
IMAGE_VALIDATORS = [validate_file_size, FileExtensionValidator(allowed_extensions=IMAGE_EXTENSIONS)]class WebsiteContent(models.Model):"""网站内容模型,用于存储运营人员可编辑的页面内容。"""# 基本字段id = models.AutoField(primary_key=True, verbose_name=_("ID"))page_location = models.CharField(max_length=255,verbose_name=_("页面位置描述"),help_text=_("如:首页Banner、关于页面等"),blank=True,null=True,)image6 = models.ImageField(upload_to='websiteimages/',verbose_name=_("填充对应的位置图片"),help_text=_("这个是本条数据填充到网页对应位置的示范截图,请根据实际位置上传对应的截图"),validators=IMAGE_VALIDATORS,null=True,blank=True)remark1 = models.CharField(max_length=255, verbose_name=_("备注1"), blank=True, null=True)remark2 = models.CharField(max_length=255, verbose_name=_("备注2"), blank=True, null=True)remark3 = models.CharField(max_length=255, verbose_name=_("备注3"), blank=True, null=True)remark4 = models.CharField(max_length=255, verbose_name=_("备注4"), blank=True, null=True)created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("创建时间"))updated_at = models.DateTimeField(auto_now=True, verbose_name=_("最后修改时间"))created_by = models.ForeignKey(settings.AUTH_USER_MODEL,# on_delete=models.PROTECT 确保创建人记录不会被意外删除on_delete=models.PROTECT,related_name='created_contents',verbose_name=_("创建人"),)updated_by = models.ForeignKey(settings.AUTH_USER_MODEL,# on_delete=models.SET_NULL 允许修改人用户被删除后,该字段设置为NULon_delete=models.SET_NULL,related_name='updated_contents',verbose_name=_("最后修改人"),null=True,blank=True,)# 页面文本字段及URLtext1 = models.CharField(max_length=255, verbose_name=_("字段1"), blank=True, null=True)text1_url = models.URLField(max_length=500, verbose_name=_("字段1 URL"), blank=True, null=True,)text2 = models.CharField(max_length=255, verbose_name=_("字段2"), blank=True, null=True)text2_url = models.URLField(max_length=500, verbose_name=_("字段2 URL"), blank=True, null=True,)text3 = models.CharField(max_length=255, verbose_name=_("字段3"), blank=True, null=True)text3_url = models.URLField(max_length=500, verbose_name=_("字段3 URL"), blank=True, null=True,)text4 = models.CharField(max_length=255, verbose_name=_("字段4"), blank=True, null=True)text4_url = models.URLField(max_length=500, verbose_name=_("字段4 URL"), blank=True, null=True,)text5 = models.CharField(max_length=255, verbose_name=_("字段5"), blank=True, null

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

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

相关文章

【C++】const和static的用法

目录🚀前言💻const:“只读”的守护者💯修饰普通变量💯修饰指针💯修饰函数💯修饰类成员💯修饰对象🌟static:“静态存储”与“作用域控制”💯修饰全…

F019 vue+flask海外购商品推荐可视化分析系统一带一路【三种推荐算法】

文章结尾部分有CSDN官方提供的学长 联系方式名片 B站up: 麦麦大数据 关注B站,有好处! 编号: F019 关键词:海外购 推荐系统 一带一路 python 视频 VueFlask 海外购电商大数据推荐系统源码 (三种推荐算法 全新界面布局…

【大数据专栏】流式处理框架-Apache Fink

Apache Fink 1 前言 1.1 功能 1.2 用户 国际 国内 1.3 特点 ◆ 结合Java、Scala两种语言 ◆ 从基础到实战 ◆ 系统学习Flink的核心知识 ◆ 快速完成从入门到上手企业开发的能力提升 1.4 安排 ◆ 初识Flink ◆ 编程模型及核心概念 ◆ DataSet API编程 ◆ Data…

向内核社区提交补丁

一、背景 内核的版本一直以来一直在持续迭代,离不开众多开发者的贡献。有时候我们会根据项目要求基于现有的内核版本开发一些新的功能或者修复掉一些特定场下的问题,我们是可以将其提交给社区的。 一般提交社区有两个基本原则,一是提交的补…

TENGJUN-USB TYPE-C 24PIN测插双贴连接器(H14.3,4脚插板带柱):USB4.0高速传输时代的精密连接方案解析

在高速数据传输与多设备互联需求日益增长的当下,USB TYPE-C接口凭借其可逆插拔、高兼容性的优势成为主流,而TENGJUN推出的USB TYPE-C 24PIN测插双贴连接器(规格:H14.3,4脚插板带柱) ,以对USB4.0…

企业级 Docker 应用:部署、仓库与安全加固

1 Docker简介及部署方法 1.1 Docker简介 Docker之父Solomon Hykes:Docker就好比传统的货运集装箱 Note 2008 年LXC(LinuX Contiainer)发布,但是没有行业标准,兼容性非常差 docker2013年首次发布,由Docker, Inc开发1.1.1 什么是do…

rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中

同一项目下多个可执行文件,多个子项目参照以下: 一、项目目录 项目/|-- client/|-- main.rs|-- Cargo.toml|-- server/|-- main.rs|-- Cargo.toml|-- Cargo.toml二、项目公共 Cargo.toml [workspace] # 定义Rust工作区配置 members …

mac本地安装mysql

本人环境 macOs 14.5 1.下载安装mysql https://dev.mysql.com/downloads/mysql/ 配置环境变量,打开terminal vim ~/.bash_profile 添加MYSQL_HOME/usr/local/mysql 在PATH中添加 通过mysql --version命令查看版本 2.开启mysql 打开终端teminal,输入命令 sudo…

面试前端遇到的问题

面试官让我写一个delay函数然后这是我写的代码async function delay(){setTimeout(function() {}, 3000); }面试官就和我说不是这个,用promise当时就蒙了,什么东西,为什么要用promise然后问豆包说Promise 是 JavaScript 中用于处理异步操作的…

Ubuntu Desktop 22.04.5 LTS 使用默认的 VNC 远程桌面

1. 打开 VNC 打开设置 - 分享 - 远程桌面2. 配置 VNC 打开远程桌面 启用vnc 选择vnc密码访问 配置密码3. 固定密码 远程桌面的访问密码在每次开机后会刷新一次,可以通过以下方式固定 打开【应用程序】-【附件】-密码和加密密钥(或…

【无线安全实验4】基于伪随机数的WPS PIN码逆向(精灵尘埃/仙尘攻击)

文章目录1 原理分析1.1 WPS连接过程1.1.1 初始阶段1.1.2 注册阶段1.2 WPS攻击原理1.2.1 在线攻击1.2.2 离线攻击1.2.2.1 Ralink模式1.2.2.2 eCos模式2 实验过程3 参考资料在2011年 Stefan Viehbck 演示过WPS的在线暴力攻击,由于PIN码猜测最多只需11000种组合&#x…

IDEA开发过程中经常使用到的快捷键

IntelliJ IDEA 开发 Java 时常用的快捷键列表 代码编辑与行操作快捷键功能描述Ctrl Y删除当前行。Ctrl D复制当前行到下一行。Shift Alt ↑将当前行(或选中块)向上移动。Shift Alt ↓将当前行(或选中块)向下移动。Ctrl /注…

ubuntu使用webrtc库开发一个webrtc推拉流程序

目录 一. 前言 二. 整体交互流程 三. 类实现说明 1. WebRtcClient 2. SignalPeerClient 3. WebRTCStream 4. 视频源类 5. 拉流渲染 四. 使用示例 1. 推流代码示例 2. 拉流代码示例 一. 前言 在 《ubuntu编译webrtc库》我们介绍了如何在 ubuntu 上使用 webrtc 源代码…

【Block总结】ConverseNet:神经网络中的反向卷积算子

1. 论文信息 标题:Reverse Convolution and Its Applications to Image Restoration 发布平台:arXiv 论文链接:https://arxiv.org/pdf/2508.09824 代码仓库:https://github.com/cszn/converseNet 任务领域:图像恢复(去噪、超分辨率、去模糊) 核心贡献:提出了一种新的反…

优化浏览体验:4个设置让Google Chrome更好用!

想要更流畅、更快速的浏览体验吗?本文章将向大家展示Google Chrome中你应该立即更改的4个重要设置,设置调整将帮助您提升性能,让你的浏览更高效。1、打开浏览器,在地址栏输入“chrome://flags"确定,在搜索标志中输…

【Git】一篇文章带你入门Git

1. 初识 Git 1.1 Git 是什么? Git 是一个开源的分布式版本控制系统,用于高效地跟踪和管理项目代码的变更历史(不仅仅是代码,还有其它格式也是可以的~) 1.2 为什么要有 Git 在学习或者是工作的时候,比如…

8 基于机器学习进行遥感影像的地物分类-以随机森林为例

目录 1 读取数据 2 数据预处理 3 模型训练 4 精度分析 5 模型预测 1 读取数据 1.右键数据所在文件夹,用pycharm打开为项目 2.在settings中设置python环境为先前配置的带GDAL和sklearn的环境 3.新建一个文件夹命名为code来存放代码,在code文件夹中新建一个rfc.py

极简版 Nginx 反向代理实验步骤

以下是最核心的反向代理实现步骤,专注于 “客户端→Nginx 代理→后端服务” 的基础转发功能:一、准备 2 台服务器角色IP 示例需安装软件代理服务器192.168.1.10Nginx后端服务器192.168.1.11Nginx/Apache二、后端服务器配置(192.168.1.11&…

Windsurf 插件正式登陆 JetBrains IDE:让 AI 直接在你的 IDE 里“打工”

那天你说,我们可以永远在一起——成了我听到的最高兴的,而后知后觉的谎言。 而今天,AI 说:“我可以帮你写完这段代码。” —— 这才是真正的“永远在一起”。 最近,AI 编程工具赛道迎来一场“潜行式革命”:Windsurf Wave 7 正式发布 JetBrains IDE 插件版本,彻底打破“A…

188. Java 异常 - Java 异常处理规范

文章目录188. Java 异常 - Java 异常处理规范📜 什么是“Catch or Specify Requirement”?✅ 两种满足方式方法一:使用 try-catch 捕获异常方法二:使用 throws 声明异常❌ 不遵守规则会怎样?💡 哪些异常必须…