Django admin 后臺開發案例【字段/圖片】

這是一個簡單的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 聲明異常? 不遵守規則會怎樣?💡 哪些異常必須…