from django.urls import re_path
from stark.servers.start_v1 import site, StartHandler
from django.http import HttpResponse, JsonResponse
from app01 import models


class DepartHandler(StartHandler):
    '''定义增删改查'''

    def extra_url(self):
        return [
            re_path("detail/(\d+)/$", self.detail_view)
        ]

    def detail_view(self):
        return HttpResponse("详情页")

site.register(models.Depart)  # 这个没有后缀
site.register(models.Depart,prev="private")  # 这个有后缀

设置别名:

    def get_urls(self):
        # 获取每个model_class类。所在的app_name 和 他自己的 表名称model_name
        app_label, model_name = self.model_class._meta.app_label, self.model_class._meta.model_name
        partterns = [
            re_path(r"list/$", self.check_list_view, name="%s_%s_list" % (app_label, model_name)),  # name="app名称_表名称_list"
            re_path(r"add/$", self.add_view, name="%s_%s_add" % (app_label, model_name)),
            re_path(r"change/(\d+)/$", self.change_view, name="%s_%s_change" % (app_label, model_name)),
            re_path(r"del/$(\d+)/$", self.delete_view, name="%s_%s_del" % (app_label, model_name)),
        ]
        partterns.extend(self.extra_url())
        return partterns

stark组件开发之URL别名的设置 随笔 第1张

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

这里还有一个问题,就是  private 这个后缀。 因为这个是用户自己制定的。
stark组件开发之URL别名的设置 随笔 第2张

可以看出 指定了后缀的,和没指定后缀的。 别名竟然是一样的。 所以还需要更改一下。代码逻辑。
首先肯定需要的是,prev 这个参数。 必须要能在  StartHandler 这个里面能够接收到,才可以用于做判断。
所以在传递参数阶段, 就需要把这个参数传递进来。
stark组件开发之URL别名的设置 随笔 第3张

这里传的时候,是每一个 Handler 类!! 他们共同继承的都是 StartHandler。所以这个基类初始化函数中。 增加一个prev参数就好:
stark组件开发之URL别名的设置 随笔 第4张

stark组件开发之URL别名的设置 随笔 第5张

看效果还不错!

 优化一下:

stark组件开发之URL别名的设置 随笔 第6张
class StartHandler(object):

    def __init__(self, model_class, prve):
        self.model_class = model_class
        self.prev = prve

    def check_list_view(self, request):
        '''
        列表查看页面
        :param request:
        :return:
        '''
        data_list = self.model_class.objects.all()
        return render(request, "changelist.html", locals())

    def add_view(self, request):
        '''
        添加页面
        :param request:
        :return:
        '''
        return HttpResponse("添加页面")

    def change_view(self, request):
        '''
        编辑页面
        :param request:
        :return:
        '''
        return HttpResponse("编辑页面")

    def delete_view(self, request):
        '''
        删除页面
        :param request:
        :return:
        '''
        return HttpResponse("删除页面")

    def get_url_name(self, param):
        '''
        判断是否有后缀  prev。 进行拼接URL的别名
        :param param: 页面后缀(list, add, change, del)
        :return:
        '''
        app_label, model_name = self.model_class._meta.app_label, self.model_class._meta.model_name
        if self.prev:
            return "%s_%s_%s_%s" % (app_label, model_name, self.prev, param)
        return "%s_%s_%s" % (app_label, model_name, param)

    @property
    def get_list_url_name(self):
        '''获取列表页面URL 的name'''
        return self.get_url_name("list")

    @property
    def get_add_url_name(self):
        '''获取添加页面URL 的name'''
        return self.get_url_name("add")

    @property
    def get_change_url_name(self):
        '''获取修改页面URL 的name'''
        return self.get_url_name("change")

    @property
    def get_del_url_name(self):
        '''获取删除页面URL 的name'''
        return self.get_url_name("del")

    def get_urls(self):
        # 获取每个model_class类。所在的app_name 和 他自己的 表名称model_name
        app_label, model_name = self.model_class._meta.app_label, self.model_class._meta.model_name

        partterns = [
            re_path(r"list/$", self.check_list_view, name=self.get_list_url_name),
            re_path(r"add/$", self.add_view, name=self.get_add_url_name),
            re_path(r"change/(\d+)/$", self.change_view, name=self.get_change_url_name),
            re_path(r"del/$(\d+)/$", self.delete_view, name=self.get_del_url_name),
        ]

        partterns.extend(self.extra_url())
        return partterns

    def extra_url(self):
        return []
StarkHandler

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄