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')

猜你喜欢

转载自www.cnblogs.com/liuer-mihou/p/10914577.html
今日推荐