• 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
  • 相关阅读:
    centos 部署.NET CORE
    nginx 负载均衡
    graylog centos7 部署
    springboot 2.x centos 7.0 部署
    HashMap源代码阅读理解
    服务器安装redis
    java ---- gradle
    uboot-makefile总览
    makeFile
    Spring 推断构造方法
  • 原文地址:https://www.cnblogs.com/chengege/p/10735323.html
Copyright © 2020-2023  润新知