效果图:

一、Stark组件

stark/service/core_func.py

  1. from django.urls import re_path
  2. from django.shortcuts import HttpResponse, render
  3.  
  4. class StarkHandler(object):
  5. list_display = []
  6.  
  7. def __init__(self, model_class, prev):
  8. self.model_class = model_class
  9. self.prev = prev
  10.  
  11. def list_view(self, request):
  12. """
  13. 列表页面
  14. :param request:
  15. :return:
  16. """
  17.  
  18. # 1. 处理表格的表头
  19. header_list = []
  20. for field in self.list_display:
  21. verbose_name = self.model_class._meta.get_field(field).verbose_name
  22. header_list.append(verbose_name)
  23.  
  24. # 2. 处理表的内容
  25. data_list = self.model_class.objects.all()
  26. print(data_list)
  27. body_list = []
  28. print(body_list)
  29. for obj in data_list:
  30. tr_list = []
  31. for field in self.list_display:
  32. tr_list.append(getattr(obj, field)) # 获取字段的值
  33. body_list.append(tr_list)
  34.  
  35. context = {
  36. 'data_list': data_list,
  37. 'header_list': header_list,
  38. 'body_list': body_list,
  39. }
  40.  
  41. return render(request, 'stark/data_list.html', context)
  42.  
  43. def add_view(self, request):
  44. """
  45. 添加页面
  46. :param request:
  47. :return:
  48. """
  49. return HttpResponse('添加页面')
  50.  
  51. def edit_view(self, request, pk):
  52. """
  53. 编辑页面
  54. :param request:
  55. :return:
  56. """
  57. return HttpResponse('编辑页面')
  58.  
  59. def delete_view(self, request, pk):
  60. """
  61. 删除页面
  62. :param request:
  63. :param pk:
  64. :return:
  65. """
  66. return HttpResponse('删除页面')
  67.  
  68. def get_url_name(self, crud):
  69. app_label, model_name = self.model_class._meta.app_label, self.model_class._meta.model_name
  70. if self.prev:
  71. return '%s_%s_%s_%s' % (app_label, model_name, self.prev, crud)
  72. return '%s_%s_%s' % (app_label, model_name, crud)
  73.  
  74. @property
  75. def get_list_url_name(self):
  76. """
  77. 获取列表页面URL的name
  78. :return:
  79. """
  80. return self.get_url_name('list')
  81.  
  82. @property
  83. def get_add_url_name(self):
  84. """
  85. 获取添加页面URL的name
  86. :return:
  87. """
  88. return self.get_url_name('add')
  89.  
  90. @property
  91. def get_edit_url_name(self):
  92. """
  93. 获取编辑页面URL的name
  94. :return:
  95. """
  96. return self.get_url_name('edit')
  97.  
  98. @property
  99. def get_delete_url_name(self):
  100. """
  101. 获取删除页面URL的name
  102. :return:
  103. """
  104. return self.get_url_name('delete')
  105.  
  106. def get_urls(self):
  107. patterns = [
  108. re_path(r'^list/$', self.list_view, name=self.get_list_url_name),
  109. re_path(r'^add/$', self.add_view, name=self.get_add_url_name),
  110. re_path(r'^edit/(\d+)/$', self.edit_view, name=self.get_edit_url_name),
  111. re_path(r'^delete/(\d+)/$', self.delete_view, name=self.get_delete_url_name),
  112. ]
  113.  
  114. patterns.extend(self.extra_urls())
  115. return patterns
  116.  
  117. def extra_urls(self):
  118. return []
  119.  
  120. class StarkSite(object):
  121. def __init__(self):
  122. self._registry = []
  123. self.app_name = 'stark'
  124. self.namespace = 'stark'
  125.  
  126. def register(self, model_class, handler_class=None, prev=None):
  127. """
  128. :param model_class: 是models中的数据库表对应的类。
  129. :param handler_class: 处理请求的视图函数所在的类
  130. :param prev: 生成URL的前缀
  131. :return:
  132. """
  133.  
  134. if not handler_class:
  135. handler_class = StarkHandler
  136. self._registry.append({'model_class': model_class, 'handler': handler_class(model_class, prev), 'prev': prev})
  137.  
  138. def get_urls(self):
  139. patterns = []
  140. for item in self._registry:
  141. model_class = item['model_class']
  142. handler = item['handler']
  143. prev = item['prev']
  144. app_name, model_name = model_class._meta.app_label, model_class._meta.model_name
  145. if prev:
  146. patterns.append(
  147. re_path(r'^%s/%s/%s/' % (app_name, model_name, prev,), (handler.get_urls(), None, None)))
  148. else:
  149. patterns.append(re_path(r'^%s/%s/' % (app_name, model_name,), (handler.get_urls(), None, None)))
  150.  
  151. return patterns
  152.  
  153. @property
  154. def urls(self):
  155. return self.get_urls(), self.app_name, self.namespace
  156.  
  157. site = StarkSite()

二、业务处理

web/stark.py

  1. from stark.service.core_func import site, StarkHandler
  2.  
  3. from web import models
  4.  
  5. class DepartmentHandler(StarkHandler):
  6. list_display = ['title']
  7.  
  8. class UserInfoHandler(StarkHandler):
  9. list_display = ['name', 'age', 'email']
  10.  
  11. site.register(models.Department, DepartmentHandler)
  12. site.register(models.UserInfo, UserInfoHandler)

stark组件(4):列表定义列,展示数据库数据的更多相关文章

  1. 24.stark组件全部

    admin组件: 博客里面的图片的是在太难弄了,有大哥会弄给我贴一片博客,我一个一个加太累了,没有加 admin参考:https://www.cnblogs.com/yuanchenqi/articl ...

  2. Java注解(Annotation)用法:利用注解和反射机制指定列名导出数据库数据

    闲来没事,想了一个应用的例子:用java如何把数据库的数据根据我们指定的某几列,如第2列,第4列,第6列导出来到Excel里? 写代码也是为了应用的,写好的代码更重要的是在于思考.我自己思考了这个示例 ...

  3. stark组件开发之列表页面定制列

    先看一张页面展示的效果图: 看一看我的  model 表!是什么样子: 看一看数据库是什么样子: 看 页面展示图,有表头. 有数据.模型表中,每一个字段, 都指定了 verbose_name. 如何解 ...

  4. stark组件开发之列表页面应用示例

    已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把!  应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的  <a href="/ ...

  5. strak组件(6):列表定制列应用和引入静态文件

    效果图: 新增函数 def get_choice_text(title, field) 闭包函数,显示choice字段 def inner(self, obj=None, is_header=None ...

  6. stark组件之创建

    stark组件之需求 仿照Django中的admin , 开发了自己的stark组件,实现类似数据库客户端的功能,对数据进行增删改查 . stark之创建 1.在项目中 创建stark应用,app01 ...

  7. stark组件(11):组合搜索

    效果图: 新增函数和类 Option 获取字段的对象或元组 SearchGroupRow 封装数据,展示到前端 get_search_group 获取组合搜索的字段 get_search_group_ ...

  8. crm项目-stark组件

    ###############  admin基本认识和常用的定制功能    ############### stark组件 对admin的基本认识 1,就是一个app,嵌入到了django里面,你可以 ...

  9. 【django之stark组件】

    一.需求 仿照django的admin,开发自己的stark组件.实现类似数据库客户端的功能,对数据进行增删改查. 二.实现 1.在settings配置中分别注册这三个app # Applicatio ...

随机推荐

  1. poj 3140 树形去边差异最小

    http://poj.org/problem?id=3140 依然是差异最小问题,不过这次是去边.思路是这样的,先记录每个点的子节点个数,然后遍历每个边. 有两个问题要注意: abs可能会出编译适配问 ...

  2. IDEA中使用spring官方模板+@Controller

    视图层处理http请求用@Controller时,要配合模板的使用,模板类似javaweb中的jsp,但是模板的引擎用的是 thymeleaf ,但是并不推荐. 现在的开发模式都是前后端分离,做后端只 ...

  3. CSS选择器备忘录

    CSS选择器备忘录 基本选择器 Selector Meaning Example 通用选择器 匹配任何元素 * 标签选择器 CSS1中称之为元素选择器,匹配为指定标签的所有元素 div 伪元素选择器 ...

  4. Visual Studio无法推送提交到Github的解决方法

    前言 当出现Visual Studio推送变更失败时,卸载系统中所有Git以及Visual Studio 的Git工具再重装即可 前情概要 今天由于要尝试使用RabbitMQ,所以打算先在本地做些小D ...

  5. atom markdown转换PDF 解决AssertionError: html-pdf: Failed to load PhantomJS module

    atom编辑器markdown转换PDF 解决AssertionError: html-pdf: Failed to load PhantomJS module. You have to set th ...

  6. 使用UserLock如何实现工作站登陆访问限制

    UserLock允许用户限制受保护账户可登陆的工作站/终端.工作站/终端限制可以通过设置或者使用特定的IP范围,计算机名/IP或组织单位实现. 对于每个工作站限制你需要指定所要限制的会话类型(默认情况 ...

  7. check_mk 之 Configuration variables

    Basic settings #check_parameters This is a configuration list assigning specific check parameters to ...

  8. Linux学习_按时间顺序解压多个文件,搜索文件中的内容

    ls的结果按时间数据先排序,再取末尾5个文件,再调用tar命令 ls -1 | sort -u | tail -5 |xargs -n1 tar xzvf 利用grep命令从文件中搜索. grep - ...

  9. notepad++ TextFX替代

    notepad++目前的版本已没有了TextFX插件,插件的原作者在2008年的时候已停止维护.目前官方的意思是用以下插件替代,见 http://docs.notepad-plus-plus.org/ ...

  10. 剑指offer 33 把数组排成最小的数

    错误代码 class Solution { public: int FindGreatestSumOfSubArray(vector<int> array) { int length = ...