zoukankan      html  css  js  c++  java
  • Django 通过 admin 操作 MySQL数据库 ,审核功能加储存记录

    1.创建MySQL数据库 moderate 表 和 moderate_log(储存记录) 表

     

    2.Django 映射

     

     

    (1)inspectdb 创建的表

     

    (2) 复制红色的框框的内容,粘贴到 models.py 文件

    可以加下面的代码或者不加也行,加的话要映射一下

    verbose_name = "Moderate"   # 首页列表的显示名称
    verbose_name_plural = verbose_name  # 列表页和详情页的显示名称

    (3) 映射一下

    3.在 admin.py 文件 编写代码(核心代码)

    from django.contrib import admin
    # from  你自己的项目.models import *
    from book_MS.models import *
    # 日期  可以选择加或者不加
    # from django.utils import timezone
    
    
    @admin.register(Moderate)
    # admin.site.register(要写的表)  与  @admin.register(要写的表)  功能是一样的
    class ModerateAdmin(admin.ModelAdmin):
        """
            *MySQL数据库moderate表:id, 名字, 内容,是否通过, 是否已审核
            'id', 'name', 'incident', 'status', 'check'
        """
    # listdisplay设置要显示在列表中的字段(id字段是Django模型的默认主键)
        list_display = ('name', 'incident', 'status', )
        # list_per_page设置每页显示多少条记录,默认是10条
        list_per_page = 10
        # list_filter过滤指定的字段
        list_filter = ('name', )
    
        # 修改admin页面actions的信息
        actions = ['mak_pub', 'mak_pub1']
    
        # 判断通过的
        def mak_pub(self, request, queryset):
            # 获取当前用户的名字
            us = request.user
            # 打印通过的数据
            for i in queryset.filter():
                # print(i.id)
                # 创建str,如果要加时间的话,就加上下面的代码
                # str = '{} {}更改了Moderate表的id为{}的信息:已通过,审核成功!'.format(timezone.now(), us, i.id)
                str = '{}更改了Moderate表的id为{}的信息:已通过,审核成功!'.format(us, i.id)
                # 插入数据到Log表中
                ModerateLog.objects.create(record=str)
    
            # 更新状态和审核
            rows_upb = queryset.update(status="1", check="1")
            # 如果获取的数是1,则执行下面代码
            if rows_upb == 1:
                message_bit = "1个视频"
            else:
                message_bit = "%s 个视频" % rows_upb
            # 通过多少的数据,显示到admin页面上
            self.message_user(request, "%s 已经通过." % message_bit)
        # 更改Action的内容为通过
        mak_pub.short_description = "通过"
    
        # 判断未通过的
        def mak_pub1(self, request, queryset):
            # 获取当前的用户
            us = request.user
            # 打印未通过的数据
            for i in queryset.filter():
                print(i)
                # 创建str
                str = '{}更改了Moderate表的id为{}的信息:未通过,审核成功!'.format(us, i.id)
                # 插入数据到Log表中
                ModerateLog.objects.create(record=str)
            # 更新状态和审核
            rows_upb = queryset.update(status="0", check="1")
            # 如果获取的数是1,则执行下面代码
            if rows_upb == 1:
                message_bit = "1个视频"
            else:
                message_bit = "%s 个视频" % rows_upb
            # 通过多少的数据,显示到admin页面上
            self.message_user(request, "%s 拒绝通过." % message_bit)
        # 更改Action的内容为通过
        mak_pub1.short_description = "未通过"
    
        # 重写已经审核过的数据,超级管理员不会通过
        def get_queryset(self, request):
            # 获取当前表所有的数据
            qs = super().get_queryset(request)
            # 判断是否未超级管理员,如果是就显示所有(已审核和未审核)的信息,不是就显示未审核的信息
            if request.user.is_superuser:
                return qs
            return qs.filter(check=0)

    4.登入 admin 后台管理

    (1)先登入超级管理员,创建管理员,然后给管理员的查看和修改 moderate 表 和 moderate_log(储存记录) 表的权限

    (2) 记得勾上职员状态,否则无法登陆 

     

     5.登入刚刚创建的管理员

     6.添加数据测试一下,到MySQL数据库手动输入几条数据

     7.效果

    (1)点击通过或者未通过,执行后会隐藏,只有超级管理员才能看见,并且会记录到 moderate_log(储存记录)表中

    永远的新手
  • 相关阅读:
    mysql安装
    Python中的 _init__和 _new__的区别
    MySQL系列
    彻底解决编码问题
    人生三问之前后端分离是什么鬼?
    什么是内存泄漏?什么是内存溢出?
    目录
    虚拟环境的使用
    如何为Redis中list中的项设置过期时间
    Redis分布式锁的python实现
  • 原文地址:https://www.cnblogs.com/chenzhanxu/p/14771610.html
Copyright © 2011-2022 走看看