• stark组件快速实现django增删改页面


    stark组件使用流程
    1.将stark组件拷贝到项目下,==》相当于一个app
    
    2.注册stark的app,
        INSTALLED_APPS = [
            'stark.apps.StarkConfig',#必须写成该形式
        ]
    
    3.在要使用的app下创建srark.py文件#名字必须为stark
    
    4.在项目的根urls.py下,添加urls
        from django.conf.urls import url
        from django.contrib import admin
        from stark.service.stark import site
        from api import views
    
        urlpatterns = [
            url(r'^admin/', admin.site.urls),
            url(r'^asset/', views.Asset.as_view()),
            url(r'^stark/', site.urls),######
        ]
    
    5.简单的增删改查+模糊查询+批量操作
        from stark.service.stark import site, StarkModelForm
        class BusinessUnitConfig(StarkConfig):
            list_display = [StarkConfig.display_checkbox, 'id', 'name']
            search_list = ['name']
            action_list = [StarkConfig.multi_delete, ]
    
        site.register(models.BusinessUnit, BusinessUnitConfig)#注册写的Config类
    
    参数解释:
    StarkConfig.display_checkbox#批量操作使用的CheckBox多选框
    list_display = [StarkConfig.display_checkbox, 'id', 'name']#要显示的字段
    earch_list = ['name']#用于模糊查询
    action_list = [StarkConfig.multi_delete, ]#用于批量操作
        list_display中字段分为普通字段,choice字段,外键字段
        普通字段:字段名即可
        choice字段:
            方式一:
            from stark.service.stark import get_choice_text
    
            get_choice_text('device_status_id', '状态')
            方式二:
            自定义show_device_status_id方法:
            def show_device_status_id(self, header=None, row=None):
                if header:
                    return '变更记录'
                return row.get_device_status_id_display()
        外键字段:直接写字段即可,但是对应的外键必须定义__str__方法
    
        action_list中的方法可以自定义:
            def multi_pri(self, request,pk):
            '''公户变私户'''
            return render()
                    redirect()
                    HttpResponse()
    
    6.简单的增删改查+自定义show方法+扩展URL+快速筛选+重写modelForm(校验规则)+DatePicker(日期选择)的运用
        from stark.service.stark import site, Option, StarkModelForm
        from stark.forms.widgets import DatePickerInput
        class ServerForm(StarkModelForm):
            class Meta:
                model = models.Server
                fields = '__all__'
    
                widgets = {
                    'latest_date': DatePickerInput(attrs={'class': 'date-picker', 'autocomplete': 'off'})
                }
            def clean(self):
                '''全局钩子'''
                通过校验,返回self.clean,data
                不通过校验,self.add_error('字段名','错误信息')或者raise ValueError
    
        class ServerConfig(StarkConfig):
            def show_hostname(self, header=None, row=None):
                if header:
                    return '主机名'
                return mark_safe("<a href='/stark/repository/server/detail/{}/'>{}</a>".format(row.pk, row))
    
            def server_assetrecord(self, request, pk):
                all_records = models.AssetRecord.objects.filter(server_id=pk).order_by('-create_at')
                return render(request, 'record.html', {'all_records': all_records})
    
            def extra_url(self):
                '''额外的url'''
                urlpatterns = [
                    url(r'^assetrecord/(d+)/', self.server_assetrecord, name='server_assetrecord'),
                ]
                return urlpatterns
    
            list_display = [ show_hostname, ]
    
            list_filter = [  # 快速筛选
                Option('business_unit', is_multi=True),
                Option('device_status_id', is_choice=True, text_func=lambda x: x[1], )
            ]
    
            model_form_class = ServerForm
    
        site.register(models.Server, ServerConfig)
        Option参数介绍:
            # Option参数介绍
            # field                      外键 choice字段进行筛选
            # condition={'id__lt':'3'}   显示id<3的业务线对象
            # is_choice=True             是否为choice字段
            # text_func=lambda x:x[1]    能够对传入的choice字段进行筛选显示
            # value_func=lambda x:1      对值进行固定
            # is_multi=True              对选,每个Option之间是OR关系,多个Option是AND的关系
            model_form_class = ServerForm
    
    7.简单的增删改查+自定义视图函数+无删除按钮
        class IDNConfig(StarkConfig):
            #========================自定义视图===============================================
            def changelist_view(self, request, *args, **kwargs):
                '''展示列表'''
                pass
    
            def change_view(self, request, pk, *args, **kwargs):
                '''编辑页面'''
                pass
    
            def delete_view(self, request, pk, *args, **kwargs):
                '''删除页面'''
                pass
    
            def add_view(self, request, *args, **kwargs):
                '''新增页面'''
                pass
            #==============================无删除按钮============================================
            def get_urls(self):
                '''生成对应的url'''
                urlpatterns = [
                    url(r'^list/$', self.wrapper(self.changelist_view), name=self.get_list_url_name),
                    url(r'^add/$', self.wrapper(self.add_view), name=self.get_add_url_name),
                    url(r'^(?P<pk>d+)/change/', self.wrapper(self.change_view), name=self.get_change_url_name),
                    # url(r'^(?P<pk>d+)/del/', self.wrapper(self.delete_view), name=self.get_del_url_name),
                ]
    
                extra = self.extra_url()
                if extra:
                    urlpatterns.extend(extra)
                return urlpatterns
    
            def get_list_display(self):
                val = []
                val.extend(self.list_display)
                val.append(StarkConfig.display_edit_del('edit'))
                return val
    
    8.实现简单的增删改查 + prev  对一个model做两个增删改查(比如一张表生成公司胡页面)
        class BusinessUnitConfig(StarkConfig):
            list_display = ['id', 'name']
    
        site.register(models.BusinessUnit, BusinessUnitConfig)
    
        class BusinessUnitConfig1(StarkConfig):
            list_display = ['id', 'name']
    
            def get_queryset(self, request, *args, **kwargs):
                return self.model_class.objects.filter()
        site.register(models.BusinessUnit, BusinessUnitConfig1, 'v1')
  • 相关阅读:
    php 获取当前目录和当前文件夹
    学习笔记12(选做)
    学习笔记11
    OpenEuler 中C与汇编的混合编程
    OpenEuler中C语言中的函数调用测试
    学习笔记10
    电子公文传输系统验收3开发环境
    电子公文传输系统验收2功能测试
    socket编程
    socket课堂
  • 原文地址:https://www.cnblogs.com/liuer-mihou/p/10914577.html
Copyright © 2020-2023  润新知