stark组件(4):列表定义列,展示数据库数据
效果图:
一、Stark组件
stark/service/core_func.py
- from django.urls import re_path
- from django.shortcuts import HttpResponse, render
- class StarkHandler(object):
- list_display = []
- def __init__(self, model_class, prev):
- self.model_class = model_class
- self.prev = prev
- def list_view(self, request):
- """
- 列表页面
- :param request:
- :return:
- """
- # 1. 处理表格的表头
- header_list = []
- for field in self.list_display:
- verbose_name = self.model_class._meta.get_field(field).verbose_name
- header_list.append(verbose_name)
- # 2. 处理表的内容
- data_list = self.model_class.objects.all()
- print(data_list)
- body_list = []
- print(body_list)
- for obj in data_list:
- tr_list = []
- for field in self.list_display:
- tr_list.append(getattr(obj, field)) # 获取字段的值
- body_list.append(tr_list)
- context = {
- 'data_list': data_list,
- 'header_list': header_list,
- 'body_list': body_list,
- }
- return render(request, 'stark/data_list.html', context)
- def add_view(self, request):
- """
- 添加页面
- :param request:
- :return:
- """
- return HttpResponse('添加页面')
- def edit_view(self, request, pk):
- """
- 编辑页面
- :param request:
- :return:
- """
- return HttpResponse('编辑页面')
- def delete_view(self, request, pk):
- """
- 删除页面
- :param request:
- :param pk:
- :return:
- """
- return HttpResponse('删除页面')
- def get_url_name(self, crud):
- 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, crud)
- return '%s_%s_%s' % (app_label, model_name, crud)
- @property
- def get_list_url_name(self):
- """
- 获取列表页面URL的name
- :return:
- """
- return self.get_url_name('list')
- @property
- def get_add_url_name(self):
- """
- 获取添加页面URL的name
- :return:
- """
- return self.get_url_name('add')
- @property
- def get_edit_url_name(self):
- """
- 获取编辑页面URL的name
- :return:
- """
- return self.get_url_name('edit')
- @property
- def get_delete_url_name(self):
- """
- 获取删除页面URL的name
- :return:
- """
- return self.get_url_name('delete')
- def get_urls(self):
- patterns = [
- re_path(r'^list/$', self.list_view, name=self.get_list_url_name),
- re_path(r'^add/$', self.add_view, name=self.get_add_url_name),
- re_path(r'^edit/(\d+)/$', self.edit_view, name=self.get_edit_url_name),
- re_path(r'^delete/(\d+)/$', self.delete_view, name=self.get_delete_url_name),
- ]
- patterns.extend(self.extra_urls())
- return patterns
- def extra_urls(self):
- return []
- class StarkSite(object):
- def __init__(self):
- self._registry = []
- self.app_name = 'stark'
- self.namespace = 'stark'
- def register(self, model_class, handler_class=None, prev=None):
- """
- :param model_class: 是models中的数据库表对应的类。
- :param handler_class: 处理请求的视图函数所在的类
- :param prev: 生成URL的前缀
- :return:
- """
- if not handler_class:
- handler_class = StarkHandler
- self._registry.append({'model_class': model_class, 'handler': handler_class(model_class, prev), 'prev': prev})
- def get_urls(self):
- patterns = []
- for item in self._registry:
- model_class = item['model_class']
- handler = item['handler']
- prev = item['prev']
- app_name, model_name = model_class._meta.app_label, model_class._meta.model_name
- if prev:
- patterns.append(
- re_path(r'^%s/%s/%s/' % (app_name, model_name, prev,), (handler.get_urls(), None, None)))
- else:
- patterns.append(re_path(r'^%s/%s/' % (app_name, model_name,), (handler.get_urls(), None, None)))
- return patterns
- @property
- def urls(self):
- return self.get_urls(), self.app_name, self.namespace
- site = StarkSite()
二、业务处理
web/stark.py
- from stark.service.core_func import site, StarkHandler
- from web import models
- class DepartmentHandler(StarkHandler):
- list_display = ['title']
- class UserInfoHandler(StarkHandler):
- list_display = ['name', 'age', 'email']
- site.register(models.Department, DepartmentHandler)
- site.register(models.UserInfo, UserInfoHandler)
stark组件(4):列表定义列,展示数据库数据的更多相关文章
- 24.stark组件全部
admin组件: 博客里面的图片的是在太难弄了,有大哥会弄给我贴一片博客,我一个一个加太累了,没有加 admin参考:https://www.cnblogs.com/yuanchenqi/articl ...
- Java注解(Annotation)用法:利用注解和反射机制指定列名导出数据库数据
闲来没事,想了一个应用的例子:用java如何把数据库的数据根据我们指定的某几列,如第2列,第4列,第6列导出来到Excel里? 写代码也是为了应用的,写好的代码更重要的是在于思考.我自己思考了这个示例 ...
- stark组件开发之列表页面定制列
先看一张页面展示的效果图: 看一看我的 model 表!是什么样子: 看一看数据库是什么样子: 看 页面展示图,有表头. 有数据.模型表中,每一个字段, 都指定了 verbose_name. 如何解 ...
- stark组件开发之列表页面应用示例
已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把! 应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的 <a href="/ ...
- strak组件(6):列表定制列应用和引入静态文件
效果图: 新增函数 def get_choice_text(title, field) 闭包函数,显示choice字段 def inner(self, obj=None, is_header=None ...
- stark组件之创建
stark组件之需求 仿照Django中的admin , 开发了自己的stark组件,实现类似数据库客户端的功能,对数据进行增删改查 . stark之创建 1.在项目中 创建stark应用,app01 ...
- stark组件(11):组合搜索
效果图: 新增函数和类 Option 获取字段的对象或元组 SearchGroupRow 封装数据,展示到前端 get_search_group 获取组合搜索的字段 get_search_group_ ...
- crm项目-stark组件
############### admin基本认识和常用的定制功能 ############### stark组件 对admin的基本认识 1,就是一个app,嵌入到了django里面,你可以 ...
- 【django之stark组件】
一.需求 仿照django的admin,开发自己的stark组件.实现类似数据库客户端的功能,对数据进行增删改查. 二.实现 1.在settings配置中分别注册这三个app # Applicatio ...
随机推荐
- poj 3140 树形去边差异最小
http://poj.org/problem?id=3140 依然是差异最小问题,不过这次是去边.思路是这样的,先记录每个点的子节点个数,然后遍历每个边. 有两个问题要注意: abs可能会出编译适配问 ...
- IDEA中使用spring官方模板+@Controller
视图层处理http请求用@Controller时,要配合模板的使用,模板类似javaweb中的jsp,但是模板的引擎用的是 thymeleaf ,但是并不推荐. 现在的开发模式都是前后端分离,做后端只 ...
- CSS选择器备忘录
CSS选择器备忘录 基本选择器 Selector Meaning Example 通用选择器 匹配任何元素 * 标签选择器 CSS1中称之为元素选择器,匹配为指定标签的所有元素 div 伪元素选择器 ...
- Visual Studio无法推送提交到Github的解决方法
前言 当出现Visual Studio推送变更失败时,卸载系统中所有Git以及Visual Studio 的Git工具再重装即可 前情概要 今天由于要尝试使用RabbitMQ,所以打算先在本地做些小D ...
- 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 ...
- 使用UserLock如何实现工作站登陆访问限制
UserLock允许用户限制受保护账户可登陆的工作站/终端.工作站/终端限制可以通过设置或者使用特定的IP范围,计算机名/IP或组织单位实现. 对于每个工作站限制你需要指定所要限制的会话类型(默认情况 ...
- check_mk 之 Configuration variables
Basic settings #check_parameters This is a configuration list assigning specific check parameters to ...
- Linux学习_按时间顺序解压多个文件,搜索文件中的内容
ls的结果按时间数据先排序,再取末尾5个文件,再调用tar命令 ls -1 | sort -u | tail -5 |xargs -n1 tar xzvf 利用grep命令从文件中搜索. grep - ...
- notepad++ TextFX替代
notepad++目前的版本已没有了TextFX插件,插件的原作者在2008年的时候已停止维护.目前官方的意思是用以下插件替代,见 http://docs.notepad-plus-plus.org/ ...
- 剑指offer 33 把数组排成最小的数
错误代码 class Solution { public: int FindGreatestSumOfSubArray(vector<int> array) { int length = ...