python—90 自定义的admin后台管理框架

知识点归纳:

extend 把两个列表合并;

添加id,编辑, 删除 按钮到页面上

1、把list_display里面的字段合并到新的列表中,再把编辑,删除按钮和页面内容展示出来,

把这些封装成函数,然后传参过来is_header=False,如果是True就返回头标名字;

# 需要把delete_col和list_display放进一个新的配置类列表中
    def get_new_list_display(self):
        new_list_display = []
        new_list_display.extend(self.list_display)
        new_list_display.append(ModelStark.edit_col)
        new_list_display.append(ModelStark.delete_col)
        # 把插入的放到列表的第一位去
        new_list_display.insert(0, ModelStark.check_col)
        return new_list_display

    def delete_col(self, obj=None, is_header=False):
        app_label = self.model._meta.app_label
        model_name = self.model._meta.model_name

        if is_header:
            return ‘删除‘
        # 返回  href=‘%s/delete/‘这样写就是在原来的url基础上增加 ID值/delete/
        # 但是利用django的反向解析就可以通过动态改变url,使url写好的url可以改变

        _url = reverse(‘delete‘, args=(obj.pk,))
        # /id/delete/
        # /1/delete/
        # / 1 / deletew /
        print(_url)
        return mark_safe("<a href=‘%s‘>删除</a>" % _url)

    def edit_col(self, obj=None, is_header=False):
        app_label = self.model._meta.app_label
        model_name = self.model._meta.model_name
        if is_header:
            return ‘编辑‘

        # url(‘^(\d+)/delete/$‘, self.delete_view, name=‘delete‘)

        _url = reverse(‘%s_%s_change‘ % (app_label, model_name), args=(obj.pk,))

        return mark_safe("<a href=‘%s‘>编辑</a>" % _url)

    def check_col(self, obj=None, is_header=False):
        if is_header:
            return ‘选择‘
        return mark_safe("<input type=‘checkbox‘>")

2、插入头部和表单数据到table里面

   做了一件事情就是遍历, 字段和方法

head_list = []
        for field_or_func in self.get_new_list_display():
            # 判断field_or_func是否是字符串,如果是就代表传过来的是字段名
            if isinstance(field_or_func, str):
                # 如果是字段名如果等于 ‘__str__‘ 就表示拿到的是默认的字段规则
                if field_or_func == ‘__str__‘:
                    # 获取当前model对象的字段值
                    val = self.model._meta.model_name.upper()
                # 拿到的是自定义的注册规则的字段
                else:
                    # 获取自定义字段的值
                    # _meta.get_field(字段字符串)
                    field_obj = self.model._meta.get_field(field_or_func)
                    val = field_obj.verbose_name
            else:
                # 拿到自定义的头部字段名称
                val = field_or_func(self, is_header=True)
            head_list.append(val)

        # 表单数据
        data_list = []
        for obj in queryset:
            temp = []
            # 循环new_list_display里面所有的字段名与函数
            for field_or_func in self.get_new_list_display():
                # 判断field_or_func是不是字符串,是就代表是字段名
                if isinstance(field_or_func, str):
                    # 把field当成字符串属性了  所以需要通过反射 getattr(obj, field)
                    val = getattr(obj, field_or_func)
                else:
                    # 如果是函数就直接调用,当作函数来用把self 和 obj传进去
                    val = field_or_func(self, obj)
                # 把所有的field
                temp.append(val)
                # obj.authors 多对多字段就需要通过判断来处理
                # Django的admin一旦碰到多对多的表就会直接报错 意思就是让我们去自定义
            data_list.append(temp)
        print(data_list)
        return render(request, "stark/list_view.html", {"data_list": data_list, ‘head_list‘: head_list})

3、用reverse反转动态匹配跳转url

    def get_urls(self):
        app_label = self.model._meta.app_label
        model_name = self.model._meta.model_name

        temp = [
            url(‘^$‘, self.list_view, name=‘%s_%s_list‘ % (app_label, model_name)),
            url(‘^add/$‘, self.add_view, name=‘%s_%s_add‘ % (app_label, model_name)),
            # 需要把id传过来要不然不可以通过id获取到需要修改的
            url(‘^(\d+)/change/$‘, self.change_view, name=‘%s_%s_change‘ % (app_label, model_name)),
            # /1/deletew/
            url(‘^(\d+)/delete/$‘, self.delete_view, name=‘delete‘)
        ]
        return temp

  

原文地址:https://www.cnblogs.com/kermitjam/p/9357292.html

时间: 2024-10-10 16:32:28

python—90 自定义的admin后台管理框架的相关文章

python—93 自定义的admin后台管理框架 组件filter、pop、open用法

遗忘知识点: ORM创建记录的时候book可以被当做返回对象来调用 book = Book.object.create(title=title) 一: open 用来实现点击添加书籍按钮弹出一个form表单的窗口页面,需要实现的效果是点击 提交按钮时把数据存到数据库,在把当前提交的书籍渲染到指定位置,并且关闭当前窗口: <ul> {% for book in book_list %} <li>{{ book.title }}</li> {% endfor %} <

python测试开发django-21.admin后台表名称和字段显示中文

前言 admin后台页面表名称(默认会多加一个s)和字段名称是直接显示在后台的,如果我们想设置成中文显示需加verbose_name和verbose_name_plural属性 verbose_name 如下图所示,列表标题显示的是数据库里面的字段(Field)名称,如果想让它显示中文的名称,需加个verbose_name参数 # models.py class Article(models.Model): '''文章''' title = models.CharField(max_length

Linux下开发python django程序(设置admin后台管理模块)

1.新建项目和项目下APP django-admin startproject csvt03 django-admin startapp app1 2.修改settings.py文件 设置默认安装APP INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages

Linux下开发python django程序(设置admin后台管理上传文件)

1.项目创建相关工作参考前面 2.在models.py文件中定义数据库结构 import django.db import modelsclass RegisterUser(models.Model): username=models.CharField(max_length=30) headImg = models.FileField(upload_to='./upload/') def __unicode__(self): return self.username 3.生成数据库 pytho

ACE admin 后台管理框架

一.样式 1.常见按钮 .btn-app .btn-group .btn-corner .btn-xs .btn-sm .btn-mini  .btn-minier .btn-defalut .btn-danger .btn-info  .btn-primary .btn-success .btn-warning .btn-grey .btn-pink .btn-purple .btn-link .btn-inverse

自定义路由组件,Django的admin后台管理,DRF的三大认证,jwt认证

目录 一.自定义路由组件 1. 为什么要自定义路由组件 2. 自定义路由组件实例 二.Django的admin后台管理 三.DRF的三大认证组件概括 1. 认证组件 2. 权限组件 3. 频率组件 四.Django中的用户权限管理 五.jwt认证 1. jwt认证和普通session认证的区别 2. jwt认证介绍 (1)jwt的原理 (2)jwt三部分的内容 3. jwt的签发算法 (1)第一步:头部算法 (2)第二步:载荷部分的算法 (3)第三步:签名部分的算法 (4)第四步:连接生成tok

Rubix - ReactJS Powered Admin Template 后台管理框架

Rubix - ReactJS Powered Admin Template  后台管理框架,使用 ReactJS. http://rubix400.sketchpixy.com/ltr/charts/rubix/piedonut# https://wrapbootstrap.com/theme/rubix-reactjs-powered-admin-template-WB09498FH

django-19.admin后台自定义显示

前言 django的admin后台默认显示的内容很少,只显示了表的相关信息,查看字段内容需点开详情才能查看,不是很直观.在admin.py文件里面是可以自定义相关的展示内容的,也可以添加搜索框,快速的搜索相关内容 优化列表显示 django的表信息列表显示默认值显示了表的相关属性 如果我们想让表里面的字段内容全部显示出来,需在admin.py文件添加list_display 属性,相关代码如下 # admin.py from django.contrib import admin from he

自定义类签发校验token-实现多方式登录-自定义反爬类-admin后台表管理字段自定义-群查接口-搜索-排序-分页

目录 复习 今日 签发token 校验token 案例:实现多方式登陆签发token 案例:自定义认证反爬规则的认证类 admin使用自定义User表:新增用户密码密文 群查接口各种筛选组件数据准备 drf搜索过滤组件 drf排序过滤组件 drf基础分页组件 复习 """ 频率组件:限制接口的访问频率 源码分析:初始化方法.判断是否有权限方法.计数等待时间方法 自定义频率组件: class MyThrottle(SimpleRateThrottle): scope = 'sm