IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django 后台管理学习笔记 -> 正文阅读

[Python知识库]Django 后台管理学习笔记

一、关于Django后台管理

1.框架自动生成的后台管理

2.从ORM模型中读取元数据,简单配置即可使用

3.功能强大,可以用于对数据库中数据的管理

二、实现步骤

第一步:框架部分的配置

步骤一、INSTALLED_APPS配置应用及依赖

INSTALLED_APPS = [
    
    'django.contrib.admin',
    'django.contrib.auth',
  ]

步骤二、模板选项配置TEMPLATES中的OPTIONS

添加上下文处理器:context_processors

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [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',
            ],
        },
    },
]

步骤三、添加中间件MIDDLEWARE

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',
]

步骤四、配置URL

from django.contrib import admin

urlpatterns = [
    path('admin/', admin.site.urls),
]

第二步,ORM模型中配置

步骤1:在模块下新建admin.py文件

步骤2:封装模型自定义的管理后台功能和选项

每个模型创建一个ModelAdmin的子类

ModelAdmin配置选项

  • fields/exclude ---- 需要编辑/不需要编辑的字段列表
  • form ---- 自定义表单
  • list_display? ----? 在列表中显示的字段
  • ordering --- 指定排序规则

步骤3:INSTALLED_APPS配置应用

需要管理的ORM模型自动搜索添加至后台管理

'accounts.app.AccountsConfig',
'system.appSystemConfig'

三、使用admin的一些优化配置

3.1、后台管理配置为中文

配置语言
LANGUAGE_CODE = 'zh-hans'

配置时区
TIME_ZONE = 'Asia/Shanghai'

模型
verbose_name = '用户详细信息'

3.2 查询速度优化

分析问题

1.减少每页的数据大小

2.减少SQL查询的次数

解决思路

list_per_page ---- 分页大小,默认每页100条

list_select_related? ---- 外键关联查询优化

3.3 格式化显示字段内容

@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
    """用户详细信息表"""

    list_display = ('format_username','sex','age','created_at')
    list_per_page = 5
    list_select_related = ('user',)

    def format_username(self,obj):
        # 用户名脱敏处理
        return obj.username[:3] + '***'

    format_username.short_description = '用户名'

3.4、快捷搜索

list_filter = ('sex',)  配置一些有choices的一些字段

3.5、 关联搜索

场景:按用户名、昵称搜索用户

search_fields? ---? 支持搜索的字段

四、自定义模型配置

  • 定制个性化的列表显示字段
  • 限制可以编辑的模型字段
# 表单中可以编辑的字段,写进field中的可以编辑
fields = ('real_name','email','phone_no','sex','age')
  • 自定义后台模型的表单验证

# form中定义表单
class ProfileEditForm(forms.ModelForm):
    """用户详细信息编辑"""
    class Meta:
        model = Profile
        fields = ('real_name','email','phone_no','sex','age')

    def clean_age(self):
        age = self.cleaned_data['age']
        if int(age) >= 120 or int(age) <= 1:
            raise forms.ValidationError('年龄只能在1-120之间')
        return age
form = ProfileEditForm   # admin.py中引用
  • 重写保存方法,执行其他业务逻辑
class ProfileEditForm(forms.ModelForm):
    """用户详细信息编辑"""
    class Meta:
        model = Profile
        fields = ('real_name','email','phone_no','sex','age')

    def clean_age(self):
        age = self.cleaned_data['age']
        if int(age) >= 120 or int(age) <= 1:
            raise forms.ValidationError('年龄只能在1-120之间')
        return age
    
    # 重写save方法
    def save(self, commit=False):
        obj = super().save(commit)
        # 保存数据做其他处理
        if not obj.source:
            obj.source = 'web'
            obj.save()
        return obj
  • 新增批量操作功能
@admin.register(User)
class MyUserAdmin(UserAdmin):
    """用户基础信息管理"""
    # 列表中显示的内容
    list_display = ('username','nickname','is_active','is_staff','date_joined')
    # 搜索字段
    search_fields = ('username','nickname')
    # 新增的字段
    add_fieldsets = UserAdmin.add_fieldsets + (
        (None,{'fields':('nickname',)}),
    )

    # 修改的表单
    fieldsets = UserAdmin.fieldsets + (
        (None,{'fields':('nickname','avatar')}),
    )

    actions = ['disable_user','enable_user']

    # 批量禁用用户
    def disable_user(self,request,queryset):

        queryset.update(is_active=False)

    disable_user.short_description = '批量禁用用户'


    def enable_user(self,request,queryset):
        """批量启用用户"""
        queryset.update(is_active=True)

    enable_user.short_description = '批量启用用户'

五、在admin中使用富文本

在django项目中安装富文本扩展

django-ckeditor

django-ckeditor · PyPI

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:10:11  更:2022-09-13 11:14:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:46:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码