Django后端架构开发:后台管理与会话技术详解

简介: Django后端架构开发:后台管理与会话技术详解

🌟 Django后端架构开发:后台管理与会话技术详解


🔹 后台管理:自定义模型类

Django的后台管理系统提供了强大的模型管理功能,你可以通过自定义模型类来控制模型在后台管理界面的显示和操作。自定义模型类通过继承admin.ModelAdmin类实现,可以指定显示的字段、过滤条件、搜索框等功能。

from django.contrib import admin
from myapp.models import MyModel
class 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, ChildModel
class ChildModelInline(admin.TabularInline):
    model = ChildModel
    extra = 1  # 默认显示的空表单数
class ParentModelAdmin(admin.ModelAdmin):
    inlines = [ChildModelInline]
admin.site.register(ParentModel, ParentModelAdmin)

代码解析:

  • ChildModelInline:定义了一个嵌套的子模型类,用于在ParentModel的编辑界面中展示ChildModel的表单。
  • extra:指定在添加新记录时,默认显示的子模型表单数。这对于批量添加相关数据很有用。
  • inlines:将ChildModelInline添加到ParentModelAdmininlines属性中,使得在编辑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 SimpleModel
admin.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 MyModel
class 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 MyModel
class MyModelAdmin(admin.ModelAdmin):
    list_display = ('name', 'status')
    list_editable = ('status',)  # 允许在列表页直接编辑状态字段
    ordering = ('-created_at',)  # 按创建时间降序排列
    fields = ('name', 'description', 'status')
admin.site.register(MyModel, MyModelAdmin)

代码解析:

  • list_display:指定在模型列表页中显示的字段,例如namestatus
  • list_editable:允许在列表页中直接编辑status字段,这对于快速编辑数据非常有用。
  • ordering:设置默认的排序方式,('-created_at',)表示按创建时间降序排列。
  • fields:定义编辑表单中显示的字段。

这种配置方式允许你自定义后台管理系统的显示和编辑功能,满足具体的业务需求。


会话技术:全面解析

🔹 会话技术:Session简介

在Web应用中,会话(Session)用于在用户和服务器之间存储和传递数据。Django提供了内置的会话管理机制,可以在视图中存储和访问会话数据。

from django.http import HttpResponse
def 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 HttpResponse
def set_basic_cookie(request):
    response = HttpResponse("基本cookie已设置")
    response.set_cookie('basic_cookie', 'value', max_age=3600)  # 设置cookie,过期时间为1小时
    return response
def 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 HttpResponse
def 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:浏览器关闭时是否过期。

通过这些设置,你可以控制会话的生命周期和存储方式,以适应不同的应用场景。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
目录
相关文章
|
2月前
|
存储 前端开发 应用服务中间件
Django 实战:静态文件与媒体文件从开发配置到生产部署
Django项目中,静态文件(Static Files)和媒体文件(Media Files)是两类不同用途的文件。本文详细介绍了它们的区别、配置方法以及在开发与生产环境中的处理方式,并结合用户头像上传功能进行实战演示,最后讲解了如何通过Nginx或OpenResty部署静态与媒体文件服务。
114 1
|
4月前
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
253 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
5月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
375 70
|
6月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
281 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
5月前
|
前端开发 JavaScript 关系型数据库
2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡
2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡
256 5
2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡
|
5月前
|
监控 前端开发 小程序
陪练,代练,护航,代打小程序源码/前端UNIAPP-VUE2.0开发 后端Thinkphp6管理/具备家政服务的综合型平台
这款APP通过技术创新,将代练、家政、娱乐社交等场景融合,打造“全能型生活服务生态圈”。以代练为切入点,提供模块化代码支持快速搭建平台,结合智能匹配与技能审核机制,拓展家政服务和商业管理功能。技术架构具备高安全性和扩展性,支持多业务复用,如押金冻结、录屏监控等功能跨领域应用。商业模式多元,包括交易抽成、增值服务及广告联名,同时设计跨领域积分体系提升用户粘性,实现生态共生与B端赋能。
435 12
|
5月前
|
人工智能 小程序 NoSQL
【一步步开发AI运动小程序】二十一、如何将AI运动项目配置持久化到后端?
本文介绍基于云智「Ai运动识别引擎」的运动配置持久化方案,旨在优化小程序或Uni APP中AI运动识别能力。通过将运动检测参数(如`Key`、`Name`、`TickMode`、`rules`或`samples`)持久化到后端,可避免因频繁调整运动参数而重新发布应用,提升用户体验。持久化数据结构支持规则和姿态样本存储,适用于关系数据库、文件或文档数据库(如MongoDB)。此外,云智还提供运动自动适配工具及「AI乐运动」产品,助力快速实现AI体育、全民健身等场景。
|
8月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
308 2
|
3月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
107 1
|
10月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
601 45

热门文章

最新文章