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 []