stark组件开发之URL别名的设置

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

这里还有一个问题,就是  private 这个后缀。 因为这个是用户自己制定的。

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

这里传的时候,是每一个 Handler 类!! 他们共同继承的都是 StartHandler。所以这个基类初始化函数中。 增加一个prev参数就好:

看效果还不错!

 优化一下:

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

猜你喜欢

转载自www.cnblogs.com/chengege/p/10735323.html