宿州市做网站的公司/什么是网络推广营销
🌟 Django后端架构开发:后台管理与会话技术详解
🔹 后台管理:自定义模型类
Django的后台管理系统提供了强大的模型管理功能,你可以通过自定义模型类来控制模型在后台管理界面的显示和操作。自定义模型类通过继承admin.ModelAdmin
类实现,可以指定显示的字段、过滤条件、搜索框等功能。
from django.contrib import admin
from myapp.models import MyModelclass MyModelAdmin(admin.ModelAdmin):# 在列表页面中显示哪些字段list_display = ('name', 'created_at', 'updated_at')# 允许在后台添加搜索功能search_fields = ('name',)# 添加过滤器list_filter = ('status',)# 添加字段排序ordering = ('-created_at',)# 自定义显示的表单fields = ('name', 'description', 'status', 'created_at')admin.site.register(MyModel, MyModelAdmin)
代码解析:
list_display
:控制模型在后台列表视图中显示的字段。('name', 'created_at', 'updated_at')
会在列表中展示名称、创建时间和更新时间。search_fields
:定义可搜索的字段。在后台管理页面中,会添加一个搜索框来根据name
字段的内容进行搜索。list_filter
:为列表视图添加过滤器,使用户可以根据status
字段进行过滤。ordering
:设置默认的排序方式。('-created_at',)
表示按创建时间降序排列。fields
:控制在编辑页面上显示的字段顺序和内容。
通过自定义模型类,你可以根据需求调整后台管理界面的展示方式和功能,使得数据管理更加高效和灵活。
🔹 后台管理语法简介:处理多关系模型
Django后台管理系统支持处理复杂的多关系模型,通过InlineModelAdmin
类可以实现对相关模型的嵌套编辑。这对于处理一对多和多对多关系特别有用。
from django.contrib import admin
from myapp.models import ParentModel, ChildModelclass ChildModelInline(admin.TabularInline):model = ChildModelextra = 1 # 默认显示的空表单数class ParentModelAdmin(admin.ModelAdmin):inlines = [ChildModelInline]admin.site.register(ParentModel, ParentModelAdmin)
代码解析:
ChildModelInline
:定义了一个嵌套的子模型类,用于在ParentModel
的编辑界面中展示ChildModel
的表单。extra
:指定在添加新记录时,默认显示的子模型表单数。这对于批量添加相关数据很有用。inlines
:将ChildModelInline
添加到ParentModelAdmin
的inlines
属性中,使得在编辑ParentModel
时可以同时编辑相关的ChildModel
数据。
这种方式允许你在后台管理系统中更直观地处理复杂的数据关系,提高了数据管理的便捷性和一致性。
🔹 admin管理:重写后台模板
Django后台系统的默认模板可以根据需要进行重写。重写后台模板使得你可以自定义管理界面的外观,例如自定义登录页面或修改模型列表的显示方式。
<!-- templates/admin/login.html -->
{% extends "admin/base_site.html" %}
{% block content %}<h1>欢迎来到自定义后台登录页面</h1>{{ block.super }}
{% endblock %}
代码解析:
templates/admin/login.html
:在templates
目录下创建一个新的模板文件来重写默认的登录页面。{% extends "admin/base_site.html" %}
:继承Django后台管理的基础模板,以确保新的模板仍然保持后台管理的基本结构。{% block content %}
:重写content
块以添加自定义内容。{{ block.super }}
保留了原有的内容。
这种方法允许你在不修改Django核心代码的情况下,个性化后台管理界面的外观和功能,从而符合项目的特定需求。
🔹 admin后台管理:管理简单模型
对于简单模型,Django后台的默认配置通常能够满足需求。你只需将模型注册到admin站点,后台管理系统会自动生成相应的管理界面。
from django.contrib import admin
from myapp.models import SimpleModeladmin.site.register(SimpleModel)
代码解析:
admin.site.register(SimpleModel)
:将SimpleModel
注册到Django后台管理系统中,使其在后台管理界面中可见和可操作。
这种基本的注册方式适用于那些不需要复杂定制的模型,它能够快速实现后台管理功能,省去额外的配置工作。
🔹 admin后台管理:配置创建管理员账号
创建管理员账号是使用Django后台管理系统的第一步,可以通过命令行工具来创建一个超级用户。超级用户拥有所有权限,可以访问和管理系统中的所有内容。
python manage.py createsuperuser
代码解析:
- 运行
createsuperuser
命令后,系统会提示输入用户名、电子邮件和密码。完成后,管理员账号即被创建。
创建管理员账号之后,你可以使用该账号登录到后台管理系统,进行系统配置、数据管理等操作。
🔹 admin后台管理:自定义模型批量管理
在Django后台管理系统中,你可以通过自定义ModelAdmin
类来实现批量操作,例如批量删除或批量更新。这对处理大量数据时非常有用。
from django.contrib import admin
from myapp.models import MyModelclass MyModelAdmin(admin.ModelAdmin):actions = ['delete_selected']def delete_selected(self, request, queryset):# 自定义批量删除操作num_deleted, _ = queryset.delete()self.message_user(request, f"成功删除 {num_deleted} 项数据")admin.site.register(MyModel, MyModelAdmin)
代码解析:
actions
:指定自定义的批量操作,例如批量删除。delete_selected
:实现了一个自定义的批量删除操作。queryset.delete()
用于删除选中的数据。self.message_user
:向用户显示操作结果的消息。
通过这种方式,你可以在后台管理系统中实现灵活的数据处理功能,提高数据管理的效率。
🔹 admin后台管理:自定义管理类
Django后台管理类可以通过继承admin.ModelAdmin
并重写其方法来实现自定义的管理逻辑。例如,你可以定制模型的显示字段、排序方式和编辑表单。
from django.contrib import admin
from myapp.models import MyModelclass MyModelAdmin(admin.ModelAdmin):list_display = ('name', 'status')list_editable = ('status',) # 允许在列表页直接编辑状态字段ordering = ('-created_at',) # 按创建时间降序排列fields = ('name', 'description', 'status')admin.site.register(MyModel, MyModelAdmin)
代码解析:
list_display
:指定在模型列表页中显示的字段,例如name
和status
。list_editable
:允许在列表页中直接编辑status
字段,这对于快速编辑数据非常有用。ordering
:设置默认的排序方式,('-created_at',)
表示按创建时间降序排列。fields
:定义编辑表单中显示的字段。
这种配置方式允许你自定义后台管理系统的显示和编辑功能,满足具体的业务需求。
会话技术:全面解析
🔹 会话技术:Session简介
在Web应用中,会话(Session)用于在用户和服务器之间存储和传递数据。Django提供了内置的会话管理机制,可以在视图中存储和访问会话数据。
from django.http import HttpResponsedef set_session(request):request.session['key'] = 'value'return HttpResponse("会话数据已存储")def get_session(request):value = request.session.get('key', '默认值')return HttpResponse(f"会话数据:{value}")
代码解析:
request.session['key'] = 'value'
:在会话中存储数据,键为'key'
,值为'value'
。request.session.get('key', '默认值')
:从会话中获取数据,如果键不存在,则返回默认值'默认值'
。
Django的会话机制简化了用户会话数据的存储和访问,提供了易用的API来操作会话数据。
🔹 会话技术:应用加密cookie
Django的会话数据通常存储在加密的cookie中,这确保了数据在客户端存储时的安全性。你可以通过配置选项来增强cookie的安全性,例如仅通过HTTPS传输cookie。
# settings.py
SESSION_COOKIE_SECURE = True # 仅在HTTPS连接中传输cookie
SESSION_COOKIE_HTTPONLY = True # 防止JavaScript访问cookie
代码解析:
SESSION_COOKIE_SECURE
:确保会话cookie仅在HTTPS连接中传输,防止数据被中间人攻击窃取。SESSION_COOKIE_HTTPONLY
:防止JavaScript访问会话cookie,减少XSS攻击的风险。
这些配置选项提高了会话数据的安全性,保护用户数据免受潜在的安全威胁。
🔹 会话技术:应用基本cookie
除了会话cookie,Django还支持设置基本的cookie,以存储非会话相关的数据。这对于需要在多个会话间持久存储用户信息的场景很有用。
from django.http import HttpResponsedef set_basic_cookie(request):response = HttpResponse("基本cookie已设置")response.set_cookie('basic_cookie', 'value', max_age=3600) # 设置cookie,过期时间为1小时return responsedef get_basic_cookie(request):value = request.COOKIES.get('basic_cookie', '默认值')return HttpResponse(f"基本cookie数据:{value}")
代码解析:
response.set_cookie('basic_cookie', 'value', max_age=3600)
:设置基本的cookie,键为'basic_cookie'
,值为'value'
,过期时间为1小时。request.COOKIES.get('basic_cookie', '默认值')
:从请求中获取cookie数据,如果不存在,则返回默认值'默认值'
。
通过设置基本cookie,你可以在多个会话间持久化存储用户数据,实现更灵活的功能。
🔹 会话技术:和cookie简介
会话与cookie紧密相关,会话数据通常存储在客户端的cookie中。Django的会话机制使用cookie来跟踪用户的会话状态,同时确保数据的安全性。
# settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 使用加密cookie存储会话数据
代码解析:
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
:指定会话数据存储在签名加密的cookie中,以确保数据的完整性和安全性。
这种方式确保了会话数据的安全性,同时允许在客户端存储会话信息。
🔹 django内置session机制:内置认证模块
Django内置的认证模块提供了完整的用户认证和会话管理功能。使用django.contrib.auth
模块,你可以轻松地实现用户登录、注销和权限管理。
from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponsedef user_login(request):user = authenticate(request, username='username', password='password')if user is not None:login(request, user)return HttpResponse("登录成功")else:return HttpResponse("登录失败")def user_logout(request):logout(request)return HttpResponse("登出成功")
代码解析:
authenticate
:检查用户名和密码是否正确。login
:将用户登录到当前会话。logout
:结束当前用户的会话。
Django的认证模块简化了用户管理,使得用户登录和权限控制变得容易实现。
🔹 会话技术:应用session实现单点登录
单点登录(SSO)使用户可以在多个系统中使用同一账号登录。Django通过配置共享会话数据实现SSO功能。
# settings.py
SESSION_COOKIE_DOMAIN = '.example.com' # 允许在example.com及其子域名中共享会话数据
代码解析:
SESSION_COOKIE_DOMAIN
:指定会话cookie的域名,使其在指定域及其子域中共享。
这种配置使得不同子域名的应用可以共享用户会话,实现无缝的单点登录体验。
🔹 会话技术:Session配置和全局处理
Django提供了多种配置选项来调整会话的行为,例如会话的过期时间和存储方式。通过合理配置,可以满足各种应用需求。
# settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 使用缓存存储会话数据
SESSION_COOKIE_AGE = 3600 # 会话有效期1小时
SESSION_EXPIRE_AT_BROWSER_CLOSE = True # 浏览器关闭时会话过期
代码解析:
SESSION_ENGINE
:设置会话存储的方式,例如缓存、数据库或加密cookie。SESSION_COOKIE_AGE
:设置会话的过期时间,单位为秒。SESSION_EXPIRE_AT_BROWSER_CLOSE
:浏览器关闭时是否过期。
通过这些设置,你可以控制会话的生命周期和存储方式,以适应不同的应用场景。
相关文章:

Django后端架构开发:后台管理与会话技术详解
🌟 Django后端架构开发:后台管理与会话技术详解 🔹 后台管理:自定义模型类 Django的后台管理系统提供了强大的模型管理功能,你可以通过自定义模型类来控制模型在后台管理界面的显示和操作。自定义模型类通过继承admin…...

挑战Infiniband, 爆改Ethernet(2)
挑战Infiniband, 爆改Ethernet之物理层 前面说过UE为了挑战Infiniband在AI集群和HPC领域的优势地位,计划爆改以太网技术,以适应AI和HPC集群对高性能、可扩展网络的需求。正如UE联盟关于愿景的说明中宣称的:”提供一个完整的架构,通…...

Postman文件上传接口测试
接口介绍 返回示例 测试步骤 1.添加一个新请求,修改请求名,填写URL,选择请求方式 2.将剩下的media参数放在请求body里,选择form-data,选择key右边的类型为file类型,就会出现选择文件的按钮Select Files&a…...

stm32入门学习14-电源控制
有时候我们的程序中有些触发执行条件,有时这些触发频率很少,我们的程序就一直在循环,这样就很浪费电,我们可以通过PWR电源控制来实现低功耗模式,即只有在触发时才执行程序,其余时间可以关闭一些没必要的设备…...

[C++][opencv]基于opencv实现photoshop算法色相和饱和度调整
【测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心实现代码】 HSL.hpp #ifndef OPENCV2_PS_HSL_HPP_ #define OPENCV2_PS_HSL_HPP_#include "opencv2/core.hpp" using namespace cv;namespace cv {enum HSL_COLOR {HSL_ALL,HSL_RED,HSL_YELLOW,HSL_GREEN,HS…...

Github 2024-08-16Java开源项目日报 Top10
根据Github Trendings的统计,今日(2024-08-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10TypeScript项目1Ruby项目1Apache Dubbo: 高性能的Java开源RPC框架 创建周期:4441 天开发语言:Java协议类型:Apache License 2.0St…...

AI学习记录 - torch 的 matmul和dot的关联,也就是点乘和点积的联系
有用大佬们点点赞 1、两个一维向量点积 ,求 词A 与 词A 之间的关联度 2、两个词向量之间求关联度,求 : 词A 与 词A 的关联度 5 词A 与 词B 的关联度 11 词B 与 词A 的关联度 11 词B 与 词B 的关联度 25 刚刚好和矩阵乘法符合: 3、什么是…...

leetcode 885. Spiral Matrix III
题目链接 You start at the cell (rStart, cStart) of an rows x cols grid facing east. The northwest corner is at the first row and column in the grid, and the southeast corner is at the last row and column. You will walk in a clockwise spiral shape to visi…...

mysql windows安装与远程连接配置
安装包在主页资源中 一、安装(此安装教程为“mysql-installer-community-5.7.41.0.msi”安装教程,安装到win10环境) 保持默认选项,点击”Next“。 点开第一行加号展开一路展开找到“MySQL Server 5,7,41 - X64”点击选中点击一下中间只想右侧的箭头看到…...

子网掩码是什么以及子网掩码相关计算
子网掩码 (Subnet Mask) 又称网络掩码 (Netmask),告知主机或路由设备,地址的哪一部分是网络号,包括子网的网络号部分,哪一部分是主机号部分。 子网掩码使用与IP地址相同的编址格式,即32 bit—4个8位组的32位长格式。…...

仿RabbitMQ实现消息队列
前言:本项目是仿照RabbitMQ并基于SpringBoot Mybatis SQLite3实现的消息队列,该项目实现了MQ的核心功能:生产者、消费者、中间人、发布、订阅等。 源码链接:仿Rabbit MQ实现消息队列 目录 前言:本项目是仿照Rabbi…...

SpringBoot教程(二十三) | SpringBoot实现分布式定时任务之xxl-job
SpringBoot教程(二十三) | SpringBoot实现分布式定时任务之xxl-job 简介一、前置条件:需要搭建调度中心1、先下载调度中心源码2、修改配置文件3、启动项目4、进行访问5、打包部署(上正式) 二、SpringBoot集成Xxl-Job1.…...

微前端架构的数据持久化策略与实践
微前端架构通过将一个大型前端应用拆分成多个小型、自治的子应用,提升了开发效率和应用的可维护性。然而,数据持久化作为应用的基础需求,在微前端架构中实现起来面临着一些挑战。本文将详细介绍在微前端架构下实现数据持久化的策略、技术和最…...

讲解 狼人杀中的买单双是什么意思
买单双这个概念通常出现在有第三方的板子中 比如 咒狐板子 丘比特板子 咒狐板子 第一天狼队只要推掉预言家 第二天就可以与咒狐协商绑票 推出其他好人 以及丘比特板子 如果拉出一个人狼链 那么如果孤独再连一个狼人 那么 狼队第一天就可以直接派人上去拿警徽,这样…...

回归分析系列5-贝叶斯回归
07贝叶斯回归 7.1 简介 贝叶斯回归将贝叶斯统计的思想应用于回归分析中,通过先验分布和似然函数来推断后验分布。在贝叶斯回归中,模型参数被视为随机变量,并且有自己的分布。通过贝叶斯公式,可以更新这些参数的分布,…...

oracle 数据中lsnrctl 是干啥的
突然发现lsnrctl stop 之后,依然可以启动数据库 就感觉怪怪的,一直以为这个是数据库的守护进程,原来不是。。。。 lsnrctl 是 Oracle 监听器控制实用程序的命令行界面工具,用于管理 Oracle Net 服务监听器。监听器是 Oracle 网络…...

Linux进程--进程地址空间
文章目录 一、进程地址空间1.想当然的内存2.实际的内存1.什么是地址空间2.地址空间和内存3.为什么要区分两种内存 一、进程地址空间 1.想当然的内存 我们在之前的学习中了解过内存的概念,所以变量都要存在内存中我们的程序才能跑起来,那么我们肯定也见…...

C语言传递指针给函数
C 语言允许您传递指针给函数,只需要简单地声明函数参数为指针类型即可。 下面的实例中,我们传递一个无符号的 long 型指针给函数,并在函数内改变这个值 实例1:获取系统的时间值 能接受指针作为参数的函数,也能接受数…...

探索 Kubernetes 持久化存储之 Rook Ceph 初窥门径
在 Kubernetes 生态系统中,持久化存储是支撑业务应用稳定运行的基石,对于维护整个系统的健壮性至关重要。对于选择自主搭建 Kubernetes 集群的运维架构师来说,挑选合适的后端持久化存储解决方案是关键的选型决策。目前,Ceph、Glus…...

今日(2024 年 8 月 13 日)科技新闻
我国成功发射卫星互联网高轨卫星:该卫星的成功发射将助力我国卫星互联网的发展。中国首台中子全散射谱仪运行 3 年成果丰硕:由粤港科技合作打造的多物理谱仪,在中国散裂中子源上运行 3 年来,已完成 300 多项用户实验。该谱仪的关键…...

Unity大场景切换进行异步加载时,如何设计加载进度条,并配置滑动条按照的曲线给定的速率滑动
一、异步加载场景的过程 1、异步加载场景用到的API LoadSceneAsync 2、异步加载的参数说明 (1)默认参数:SceneManagement.LoadSceneAsync(“SceneName”); AsyncOperation task SceneManager.LoadSceneAsync("SceneName");&a…...

Selenium + Python 自动化测试16(Python基础复习)
我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。 上一篇我们讨论了使用模块化测试的测试模型,从某一程度也反映出熟练掌握一门编程语言的重要性。 为了后续进一步深入学习。本篇文章主要做下Python基础知识的复习。…...

2024新型数字政府综合解决方案(六)
新型数字政府综合解决方案通过融合人工智能、大数据、区块链和云计算技术,构建了一个全方位智能化的政务平台,旨在提升政府服务的效率、透明度和公众参与度。该方案实现了跨部门的数据互联互通与实时更新,利用先进的数据分析和自动化处理技术…...

vscode的C/C++环境配置和调试技巧
目录 1.背景 2.下载编译器 3.配置环境变量 4.安装C/C插件 5.写C语言代码并且编译成功 5.1文件操作 5.2对于两个窗口的解释 5.3C语言编译环境配置 6.创建执行文件 7.编译运行过程 8.写其他的代码的解决方案一 9.写其他的代码的解决方案二 10.同时编译多个.c文件 10…...

Python制作《扫雷》游戏-附源码,轻松看懂,简单易学
今天介绍另一款经典小游戏,扫雷,这个应该是很多人windows电脑里玩的最多的游戏了,乐趣很多,而且还有一定的技术含量在里面,今天我们就来通过python实现这个小游戏。 创建扫雷文件 打开pycharm,创建一个名…...

8路VBO转HDMI2.0支持4K60频率ITE6265芯片方案心得分享
在此之前,有人找到我这边询问能不能将智能电视主板改成机顶盒,将VBO信号转换输出位HDMI进行投屏,具体应用奇奇怪怪!但是奈何是甲方大佬。认命照做。从网上也有搜索了解过这类芯片,发现资料很少,所以有了这篇…...

【问题解决3】【已解决】Cannot determine path to‘tools.jar‘libraryfor17
前几天在IDEA运行JAVA项目时,出现这个报错。 这是因为是这个笔记本上安装的IDEA版本是“IntelliJ IDEA 2020.3.1”,与JDK17版本不兼容,这种情况下要想使得IDEA版本与JDK版本兼容,就需要升级IDEA版本或者使用JDK较低版本ÿ…...

基于Spring Boot的高效宠物购物平台
✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…...

【Vue3】路由基础
【Vue3】路由基础 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本…...

掌握网络数据的钥匙:Python Requests-HTML库深度解析
文章目录 掌握网络数据的钥匙:Python Requests-HTML库深度解析背景:为何选择Requests-HTML?什么是Requests-HTML?如何安装Requests-HTML?5个简单库函数的使用方法3个场景下库的使用示例常见Bug及解决方案总结 掌握网络…...