学习日记之《Django3 Web应用开发实战》——第九章——Admin 后台系统

本文详细介绍了如何使用DjangoSimpleUI进行后台界面优化,包括设置主题、参数、字段权限、外键选项、自定义函数、保存行为以及数据批量操作。
摘要由CSDN通过智能技术生成

第九章——Admin 后台系统

# 界面优化
pip3 install django-simpleui

Simple UI 文档

simpleui几个常用设置, 文档中都有介绍
SIMPLEUI_DEFAULT_THEME = 'simpleui.css'  
SIMPLEUI_ANALYSIS = False
SIMPLEUI_HOME_PAGE = 'https://www.baidu.com'
SIMPLEUI_HOME_TITLE = '百度一下你就知道'
SIMPLEUI_HOME_ICON = 'fa fa-user'
SIMPLEUI_INDEX = 'https://www.88cto.com'
SIMPLEUI_LOGO = 'https://avatars2.githubusercontent.com/u/13655483?s=60&v=4'
SIMPLEUI_HOME_INFO = False
SIMPLEUI_HOME_QUICK = True
SIMPLEUI_HOME_ACTION = False
# admin 较全面的参数
@admin.register(Vocation)
class VocationAdmin(admin.ModelAdmin):
    # 在数据新增或修改页面设置可编辑的字段
    # fields = ['job', 'title', 'payment', 'person']

    # 在数据新增或修改页面设置不可编辑的字段
    # exclude = []

    # 改变新增或修改页面的布局
    fieldsets = (
        (
            '职业信息', {
                'fields': ('job', 'title', 'payment')
            }
        ),
        (
            '人员信息', {
                # 设置隐藏和显示
                'classes': ('collapse',),
                'fields': ('person',)
            }
        ),
    )

    # 将下拉框改为单选按钮
    radio_fields = {'person': admin.HORIZONTAL}

    # 在数据新增或修改页面设置可读字段,不可编辑
    # readonly_fields = ['job']

    # 设置排序方式
    ordering = ['id']

    # 设置数据列表页的每列数据是否排序显示
    sortable_by = ['job', 'title']

    # 数据列表页设置显示的字段
    list_display = ['id', 'job', 'title', 'payment', 'person']

    # 为数据列表页字段设置路由地址,可直接进入修改页
    # list_display_links = ['job']

    # 设置过滤,如有外键,使用双下划线连接两个模型字段
    list_filter = ['job', 'title', 'person__name']

    # 数据列表页显示每页显示的数量
    list_per_page = 20

    # 每页最大显示数量
    list_max_show_all = 200

    # 数据列表页设置编辑状态
    list_editable = ['job', 'title']

    # 设置可搜索的字段
    search_fields = ['job']

    # 数据列表页设置日期选择器
    date_hierarchy = 'recordTime'

    # 添加另存为功能
    save_as = True

    # 设置动作栏的位置
    actions_on_top = True
    actions_on_bottom = True
# 任意一个应用下的 admin.py 可设置后台管理的名称
admin.site.site_title = 'MyDjango后台管理'
admin.site.site_header = 'MyDjango'

# 修改应用名
第一步:修改apps.py文件,在name所在行下方增加 
verbose_name = "学习笔记"

第二步:修改__init__.py文件,添加以下内容:
default_app_config = "note_wx.apps.NoteWxConfig" # 自改

Admin后台二次开发

设置只读属性

# admin.py
@admin.register(Vocation)
class VocationAdmin(admin.ModelAdmin):
    # 在数据新增或修改页面设置可编辑的字段
    # fields = ['job', 'title', 'payment', 'person']

    # 在数据新增或修改页面设置不可编辑的字段
    # exclude = []

    # 设置超级管理员和普通用户的权限
    def get_readonly_fields(self, request, obj=None):
        if request.user.is_superuser:
            self.readonly_fields = []
        else:
            self.readonly_fields = ['payment']
        return self.readonly_fields

设置字段样式

# models.py
from django.utils.html import format_html
class Vocation(models.Model):
    JOB = (
        ('软件开发', '软件开发'),
        ('软件测试', '软件测试'),
        ('需求分析', '需求分析'),
        ('项目管理', '项目管理'),
    )
    job = models.CharField(max_length=20, choices=JOB)
    title = models.CharField(max_length=20)
    payment = models.IntegerField(null=True, blank=True)
    person = models.ForeignKey(PersonInfo, on_delete=models.CASCADE)
    recordTime = models.DateField(auto_now=True, null=True, blank=True)

    def __str__(self):
        return self.job

    class Meta:
        verbose_name = '职业信息'
        verbose_name_plural = '职业信息'


    # 自定义函数,字段
    def colored_name(self):  # admin.py 的list_display 添加函数名 表示字段
        if 'cooper' in self.person.name:
            color_code = 'red'
        else:
            color_code = 'blue'
        return format_html(
            '<span style="color: {};">{}</span>',
            color_code,
            self.person.name
        )

    # 设置admin 字段名称
    colored_name.short_description = '带颜色的姓名'

# admin.py
# 数据列表页设置显示的字段
    list_display = ['id', 'job', 'title', 'payment', 'person', 'colored_name']

函数 get_queryset(self, request)

@admin.register(Vocation)
class VocationAdmin(admin.ModelAdmin):
    # 在数据新增或修改页面设置可编辑的字段
    # fields = ['job', 'title', 'payment', 'person']

    # 在数据新增或修改页面设置不可编辑的字段
    # exclude = []

    # 设置超级管理员和普通用户的权限

    # 根据当前用户设置数据访问权限
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if request.user.is_superuser:
            return qs
        else:
            return qs.filter(id__lt=2)  # 返回该模型下数据id小于2的数据

函数formfield_for_foreignkey,外键增加下拉框

@admin.register(Vocation)
class VocationAdmin(admin.ModelAdmin):
    # 在数据新增或修改页面设置可编辑的字段
    # fields = ['job', 'title', 'payment', 'person']

    # 在数据新增或修改页面设置不可编辑的字段
    # exclude = []

    # 设置超级管理员和普通用户的权限

    # 新增或者修改数据时,设置外键可选值
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        # 判断是否为外键字段
        if db_field.name == 'person':
            # 判断是否为超级管理员
            if not request.user.is_superuser:
                v = Vocation.objects.filter(id__lt=3)
                kwargs['queryset'] = PersonInfo.objects.filter(id__in=v)
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

函数formfield_for_choice_field(模型字段设置了choices选项)

@admin.register(Vocation)
class VocationAdmin(admin.ModelAdmin):
    # 在数据新增或修改页面设置可编辑的字段
    # fields = ['job', 'title', 'payment', 'person']

    # 在数据新增或修改页面设置不可编辑的字段
    # exclude = []

    # 设置超级管理员和普通用户的权限
    
    def formfield_for_choice_field(self, db_field, request, **kwargs):
        if db_field.name == 'job':
            # 减少job字段的可选项
            kwargs['choices'] = (
                    ('软件开发', '软件开发'),
                    ('软件测试', '软件测试'),)
        return super().formfield_for_choice_field(db_field, request, **kwargs)

函数save_model

@admin.register(Vocation)
class VocationAdmin(admin.ModelAdmin):
    # 在数据新增或修改页面设置可编辑的字段
    # fields = ['job', 'title', 'payment', 'person']

    # 在数据新增或修改页面设置不可编辑的字段
    # exclude = []

    # 设置超级管理员和普通用户的权限
    # 新增或修改数据,点击保存时触发
    def save_model(self, request, obj, form, change):
        if change:
            user = request.user.username
            job = self.model.objects.get(pk=obj.pk).job
            person = form.clean_data['person'].name
            f = open('log.txt', 'a')
            f.write(person + '职位: ' + job + ', 被 ' + user + '修改' + '\r\n')
            f.close()
        else:
            pass
        # 使用super()在继承父类已有的功能下新增自定义功能
        super().save_model(request, obj, form, change)

数据批量操作

@admin.register(Vocation)
class VocationAdmin(admin.ModelAdmin):
    # 在数据新增或修改页面设置可编辑的字段
    # fields = ['job', 'title', 'payment', 'person']

    # 在数据新增或修改页面设置不可编辑的字段
    # exclude = []

    # 设置超级管理员和普通用户的权限

    def get_data(self, request, queryset):
        temp = []
        for d in queryset:
            t = [d.job, d.title, str(d.payment), d.person.name]
            temp.append(t)
        f = open('data.txt', 'a')
        for t in temp:
            f.write(', '.join(t) + '\r\n')
        f.close()

        # 设置提示信息
        self.message_user(request, '数据导出成功')

    # 设置函数的显示名称
    get_data.short_description = '导出所选数据'
    # 添加到动作栏
    actions = [get_data]
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Django 3 Web应用开发实战》是一本介绍如何使用Django框架开发Web应用的书籍。本书从基础知识开始,逐步介绍了Django框架的各个方面,包括模型、视图、模板、表单、用户认证、管理后台等。通过实际案例的演示,读者可以学习到如何使用Django框架开发出高质量的Web应用。本书适合有一定Python编程基础的读者阅读。 ### 回答2: Django 3 Web应用开发实战是一本非常实用的书籍,是一本值得购买的好书,对于想要快速入门Django开发的人来说,无疑是一个不错的选择。 本书首先介绍了Django框架的基本概念,包括MVT(Model-View-Template)架构、路由、请求和响应等内容,并通过几个简单的示例让读者快速上手。 接着,本书详细地讲述了Django 3框架的各种特性,包括ORM数据库、模板引擎、静态文件、表单、验证器、分页、表单验证、跨域等,同时还涉及了如何使用Ajax、jQuery等前端技术框架,让读者能够更加深入的理解如何开发一个完整的Django 3 Web应用。 此外,本书还介绍了如何将Django 3应用部署到Apache等服务器上,以及如何使用Docker容器等技术进行部署,让读者不仅能够熟练掌握Django 3的开发技术,还能够将开发应用部署到实际环境中去。 总之,Django 3 Web应用开发实战是一本非常实用的书籍,对于想要从事Web应用开发的人来说,无疑是一个相当不错的引导书。如果你是一位喜欢动手实践的程式设计师,那么选择这本书将会是你事业的一次正确决策! ### 回答3: django 3 web应用开发实战是一本以python web框架django为基础,介绍如何使用django 3进行web应用开发实战教程。本书作者是阿普顿(Andrew Pinkham),是一位专业的django开发者,有着丰富的django开发经验。 本书共分为3部分,共12章。第一部分主要介绍django 3的基础知识,包括django框架的概况、模型、视图、模板、表单、用户认证、权限系统等内容。对于初学者来说,这部分的内容比较基础,但是对于已经有一定开发经验的人来说,这部分内容也非常重要,因为其中讲解的很多概念和技术都是后续内容的基础。 第二部分介绍django 3的高级应用,包括ajax、测试、性能优化、安全、缓存、分页、搜索等内容。这部分的内容相对来说,是较为高级的,需要读者具备一定开发经验和实践能力。 第三部分则是项目实战,以一个在线书店为例,深入讲解如何使用django 3进行开发。这个例子涵盖了很多常见的web开发需求,在实现过程中,作者也会提出一些最佳实践和技巧。 总之,django 3 web应用开发实战是一本很实用的django教程,对于想要深入了解django 3的web开发者来说,可以说是一本必读的好书。通过学习这本书,读者不仅可以在技术上得到提高,还能够更好的了解web应用开发流程和工作方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值