1、编辑按钮构建完成

1、必备知识预习

  

2、mark_safe模块:将html标签安全传输

3、构造表单数据

4、反向解析

https://www.cnblogs.com/yuanchenqi/articles/7629939.html

5、编辑按钮构造

# -*- coding: utf-8 -*-
# @Time    : 2018/08/17 0017 14:52
# @Author  : Venicidfrom stark.service import stark
from .models import *from django.utils.safestring import mark_safe
from django.urls import reverseclass AuthorConfig(stark.ModelStark):def edit(self,obj):# return mark_safe("<a>编辑</a>")# 方案1:固定url# return mark_safe("<a href=/stark/app01/userinfo/%s/change>编辑</a>")# 方案2:拼接url# return mark_safe("<a href='%s/change'>编辑</a>")# 方案3:反向解析model_name = self.model._meta.model_nameapp_label = self.model._meta.app_label_url = reverse("%s_%s_change"%(app_label,model_name),args=(obj.pk,))print("_url",_url)return mark_safe("<a href='%s'>编辑</a>"%_url)list_display = ['pk', 'name', 'age', edit]stark.site.register(Book)
stark.site.register(Publish)
stark.site.register(Author,AuthorConfig)
stark.site.register(AuthorDetail)print(stark.site._registry)"""
{<class 'app01.models.Book'>: <stark.service.stark.ModelStark object at 0x0000003AA7439630>,
<class 'app01.models.Publish'>: <stark.service.stark.ModelStark object at 0x0000003AA7439668>,
<class 'app01.models.Author'>: <stark.service.stark.ModelStark object at 0x0000003AA74396A0>,
<class 'app01.models.AuthorDetail'>: <stark.service.stark.ModelStark object at 0x0000003AA7439940>}
"""

starkadmin.py

# -*- coding: utf-8 -*-
# @Time    : 2018/08/17 0017 14:46
# @Author  : Venicid
from django.conf.urls import url
from django.shortcuts import HttpResponse,renderclass ModelStark(object):list_display = ["__str__"]  # 子类中没有,直接用父类自己的def __init__(self,model, site):self.model = modelself.site = sitedef list_view(self, request):print(self.model)  # <class 'app01.models.Book'>  用户访问的模型表print('list_display',self.list_display)# 获取data_listdata_list = self.model.objects.all()        # [obj1,obj2,...]new_data_list = []for obj in data_list:       # Book表模型,Author表模型temp = []for filed in self.list_display:     # ['name','age']if callable(filed):                 # edit()  可调用的val = filed(self,obj)           # 直接调用edit()函数else:val = getattr(obj,filed)       # 反射  obj是实例对象,name是方法
                temp.append(val)new_data_list.append(temp)print('new_data_list',new_data_list)        # 构造数据  [['jack', 44], ['mark', 33]]return render(request,'list_view.html', locals())def add(self, request):return HttpResponse('add')def delete(self, request, id):return HttpResponse('delete')def change(self, request, id):return HttpResponse('change')def get_urls2(self):"""构造 add/delete/change"""model_name = self.model._meta.model_nameapp_label = self.model._meta.app_labeltemp = []temp.append(url(r'^$', self.list_view, name='%s_%s_list'%(app_label,model_name)))temp.append(url(r'^add/', self.add, name='%s_%s_add'%(app_label,model_name)))temp.append(url(r'^(\d+)/delete/', self.delete, name='%s_%s_delete'%(app_label,model_name)))temp.append(url(r'^(\d+)/change/', self.change, name='%s_%s_change'%(app_label,model_name)))return temp@propertydef urls2(self):return self.get_urls2(), None, Noneclass StarkSite(object):"""site单例类"""def __init__(self):self._registry = {}def register(self,model, stark_class=None):"""注册"""if not stark_class:stark_class = ModelStarkself._registry[model] = stark_class(model,self)def get_urls(self):"""构造一层urls app01/book"""temp = []for model, stark_class_obj in self._registry.items():print(model, 'stark_clas_obj', stark_class_obj)  # 不同的model模型表"""<class 'app01.models.UserInfo'> ----> <app01.starkadmin.UserConfig object at 0x00000072DDB65198><class 'app01.models.Book'> ----> <stark.service.stark.ModelStark object at 0x00000072DDB65240>"""app_label = model._meta.app_label     # app01model_name = model._meta.model_name   # book# temp.append(url(r'^%s/%s'%(app_label, model_name),([],None,None)))temp.append(url(r'^%s/%s/'%(app_label, model_name),stark_class_obj.urls2))"""path('app01/userinfo/',UserConfig(Userinfo,site).urls2),path('app01/book/',ModelStark(Book,site).urls2),"""return temp@propertydef urls(self):# return [],None,Nonereturn self.get_urls(),None,Nonesite = StarkSite()   # 单例对象

stark/service/stark.py

2、构造表头,删除,checkbox,links编辑

1、必备小知识

2、list_display显示表头

3、verbose_name显示中文

4、list_display_links编辑link构造

3、代码+总结

1、总结

完成(list_display)(list_display_links)

1.根据str,拿字段对象,取中文    val = self.model._meta.get_field(field).verbose_name

2.模型名称,app名称 model_name = self.model._meta.model_name    app_lable = self.model._meta.app_label

3.判断是否可调用  if callable(field):        val = field(self, header = True)

4.字符串找对象得属性,反射    val = getattr(data, field)

5.返回标签    return mark_safe("<input id='choice' type='checkbox'>")

6.插入数组[]    temp.append(ModelStark.checkbox)temp.extend(self.list_display)

7.反向解析,含正则 _url = reverse("%s_%s_delete" % (app_label, model_name), args=(obj.pk,))    _url = reverse("%s_%s_add" % (app_label, model_name))
8.复选框,全选/全不选    $('#choice').click(function () {        if($(this).prop('checked')){            $('.choice_item').prop('checked',true)        }else{            $('.choice_item').prop('checked',false)        }    })

2、starkadmin.py

from stark.service import stark
from .models import *class AuthorConfig(stark.ModelStark):list_display = ['nid', 'name', 'age']list_display_links = ['name','age']stark.site.register(Book)
stark.site.register(Publish)
stark.site.register(Author,AuthorConfig)
stark.site.register(AuthorDetail)print(stark.site._registry)

3、stark/server/stark.py

# -*- coding: utf-8 -*-
# @Time    : 2018/08/17 0017 14:46
# @Author  : Venicid
from django.conf.urls import url
from django.shortcuts import HttpResponse,renderfrom django.utils.safestring import mark_safe
from django.urls import reverseclass ModelStark(object):list_display = ["__str__"]  # 子类中没有,直接用父类自己的list_display_links = []def __init__(self,model, site):self.model = modelself.site = site# 复选框,编辑,删除def checkbox(self,obj=None, header=False):if header:return mark_safe("<input id='choice' type='checkbox'>")return mark_safe("<input class='choice_item' type='checkbox'>")def edit(self,obj=None, header=False):if header:return "操作"# 方案1:固定url# return mark_safe("<a href=/stark/app01/userinfo/%s/change>编辑</a>")# 方案2:拼接url# return mark_safe("<a href='%s/change'>编辑</a>")# 方案3:反向解析model_name = self.model._meta.model_nameapp_label = self.model._meta.app_label_url = reverse("%s_%s_change"%(app_label,model_name),args=(obj.pk,))# print("_url",_url)return mark_safe("<a href='%s'>编辑</a>"%_url)def deletes(self,obj=None, header=False):if header:return "操作"model_name = self.model._meta.model_nameapp_label = self.model._meta.app_label_url = reverse("%s_%s_delete"%(app_label,model_name),args=(obj.pk,))return mark_safe("<a href='%s'>删除</a>"%_url)def new_list_play(self):"""构建 ['checkbox','pk', 'name', 'age', edit,'delete']"""temp = []temp.append(ModelStark.checkbox)temp.extend(self.list_display)if not self.list_display_links:temp.append(ModelStark.edit)temp.append(ModelStark.deletes)return tempdef list_view(self, request):print(self.model)  # <class 'app01.models.Book'>  用户访问的模型表# 构建表头header_list = []  # # header_list = ['选择','pk',...'操作','操作']for field in self.new_list_play():if callable(field):# header_list.append(field.__name__)val = field(self,header=True)header_list.append(val)else:if field == "__str__":header_list.append(self.model._meta.model_name.upper())else:val = self.model._meta.get_field(field).verbose_name    # 中文名称
                    header_list.append(val)# 构建表单data_list = self.model.objects.all()        # [obj1,obj2,...]new_data_list = []for obj in data_list:                   # Book表模型,Author表模型temp = []for field in self.new_list_play():     # ['name','age']if callable(field):                 # edit()  可调用的val = field(self,obj)           # 直接调用edit()函数print('val--------->',val)else:val = getattr(obj,field)       # 反射  obj是实例对象,name是方法# list_display_links 按钮if field in self.list_display_links:model_name = self.model._meta.model_nameapp_label = self.model._meta.app_label_url = reverse("%s_%s_change" % (app_label, model_name), args=(obj.pk,))# print(_url)val = mark_safe("<a href='%s'>%s</a>"%(_url,field))temp.append(val)new_data_list.append(temp)print('new_data_list',new_data_list)        # 构造数据  [['jack', 44], ['mark', 33]]return render(request,'list_view.html', locals())def add(self, request):return HttpResponse('add')def delete(self, request, id):return HttpResponse('delete')def change(self, request, id):return HttpResponse('change')def get_urls2(self):"""构造 add/delete/change"""model_name = self.model._meta.model_nameapp_label = self.model._meta.app_labeltemp = []temp.append(url(r'^$', self.list_view, name='%s_%s_list'%(app_label,model_name)))temp.append(url(r'^add/', self.add, name='%s_%s_add'%(app_label,model_name)))temp.append(url(r'^(\d+)/delete/', self.delete, name='%s_%s_delete'%(app_label,model_name)))temp.append(url(r'^(\d+)/change/', self.change, name='%s_%s_change'%(app_label,model_name)))return temp@propertydef urls2(self):return self.get_urls2(), None, Noneclass StarkSite(object):"""site单例类"""def __init__(self):self._registry = {}def register(self,model, stark_class=None):"""注册"""if not stark_class:stark_class = ModelStarkself._registry[model] = stark_class(model,self)def get_urls(self):"""构造一层urls app01/book"""temp = []for model, stark_class_obj in self._registry.items():print(model, 'stark_clas_obj', stark_class_obj)  # 不同的model模型表"""<class 'app01.models.UserInfo'> ----> <app01.starkadmin.UserConfig object at 0x00000072DDB65198><class 'app01.models.Book'> ----> <stark.service.stark.ModelStark object at 0x00000072DDB65240>"""app_label = model._meta.app_label     # app01model_name = model._meta.model_name   # book# temp.append(url(r'^%s/%s'%(app_label, model_name),([],None,None)))temp.append(url(r'^%s/%s/'%(app_label, model_name),stark_class_obj.urls2))"""path('app01/userinfo/',UserConfig(Userinfo,site).urls2),path('app01/book/',ModelStark(Book,site).urls2),"""return temp@propertydef urls(self):# return [],None,Nonereturn self.get_urls(),None,Nonesite = StarkSite()   # 单例对象

4、模板层

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.css"><script src="/static/jQuery/jquery-3.2.1.min.js"></script>
</head>
<body>
<h3>list页面</h3>
<div class="container"><div class="row"><div class="col-md-9 col-lg-offset-1"><table class="table table-bordered table-striped"><tr>{% for header in header_list %}<th>{{ header }}</th>{% endfor %}</tr>{% for data in new_data_list %}<tr>{% for item in data %}<td>{{ item }}</td>{% endfor %}</tr>{% endfor %}</table></div></div>
</div><script type="text/javascript">$('#choice').click(function () {if ($(this).prop('checked')){   //对象自身属性中是否具有指定的属性
                $('.choice_item').prop("checked",true)}else{$('.choice_item').prop("checked",false)}})
</script>
</body>
</html>

转载于:https://www.cnblogs.com/venicid/p/9494696.html

8 stark组件 展示数据相关推荐

  1. CRM项目之stark组件url的视图函数和列表页面基本展示2

    页面上展示数据表的表头 我们注册了UserInfo表之后,在视图函数change_list_view中执行data_list = self.model_class.objects.all()就可以拿到 ...

  2. 移动端通用元件库+app通用元件库+数据展示+操作反馈+通用模板+数据录入+列表页+表单页+详情页+通用版布局+移动端手机模板+业务组件+反馈组件+展示组件+表单组件+导航组件

    移动端通用元件库+app通用元件库+数据展示+操作反馈+通用模板+数据录入+列表页+表单页+详情页+通用版布局+移动端手机模板+业务组件+反馈组件+展示组件+表单组件+导航组件 原型展示及下载地址:h ...

  3. iphone开发之表格组件UITableView的使用(二)如何分组展示数据并添加组头和组尾描述

    1.在实现UITAbleView数据源协议即UITableViewDataSource内的如下方法中: //  此方法用于告诉哪个UITableView的每一组的每一行显示什么内容 -(UITable ...

  4. python Stark 组件

    Django Admin 是对model中 对应的数据表进行增删改查的组件,对每个APP下面已注册的model表进行增删改查.而stark组件仿照Admin组件开发. Admin的常用配置:  Fil ...

  5. CRM项目之stark组件之列表页面功能补充4

    排序 用户可以在自定义的handle类中来决定排序的规则 StarkHandel类中编写如下代码,给用户留出接口 class StarkHandle(object):order_list = [] # ...

  6. Stark 组件:快速开发神器 —— 锦上添花

    Stark 组件:快速开发神器 -- 锦上添花 一.分页 二.排序 三.搜索 1.关键字搜索 2.组合搜索 四.批量操作 经过前面几个篇章,我们的 Stark 组件已经能够批量生成 URL,快速实现增 ...

  7. Stark 组件:快速开发神器 —— 页面显示

    说道 Stark 你是不是不会想到他--Tony Stark,超级英雄钢铁侠,这也是我的偶像. 不过我们今天要开发的 Stark 组件,倒是跟他的人工智能助手 JARVIS 有些类似,是帮助我们快速开 ...

  8. Stark 组件:快速开发神器 —— 自动生成 URL

    说道 Stark 你是不是不会想到他--Tony Stark,超级英雄钢铁侠,这也是我的偶像. 不过我们今天要开发的 Stark 组件,倒是跟他的人工智能助手 JARVIS 有些类似,是帮助我们快速开 ...

  9. 父组件访问子组件中的数据(父子组件通信案例:父组件访问子组件$refs[‘子组件‘],子组件传递数据给父组件(父组件中使用v-model))

    一.需求 二.在父组件upload-cover中: 通过$refs['子组件的ref属性值']就能拿到子组件对象 三.在子组件imgae-list(相对于父组件upload-cover来说,image ...

最新文章

  1. 用jstl截取字符串
  2. .Net Core添加分布式Session
  3. 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)...
  4. 敏感词库 php,敏感词过滤的php类库
  5. 汤晓鸥谈深度学习三大核心要素:算法设计、高性能的计算能力以及大数据
  6. 这家创新学校是如何用钉钉宜搭构建了数字化管理网络的?
  7. PYTHON1.day21
  8. Java SE 8新特性导览:使用Lambda Expression进行函数式编程
  9. 信息学奥赛一本通(1225:金银岛)
  10. 1092 回文字符串(51nod)
  11. SpringBoot启动源码探究---getRunListener()
  12. 蓝桥杯 ALGO-43 算法训练 A+B Problem
  13. Django 进阶篇之 CSRF,COOIKE,SESSION
  14. MVC 19个通信(请求)管道
  15. python数据类型-列表练习
  16. 机器学习,参数之-学习率设置
  17. PHP 日期时间类 Carbon 的常见用法
  18. 善用佳软:如何使用Beyond Compare比对class文件
  19. TDengine在智慧城市大数据管理系统中的应用实践
  20. 常识推理问答相关最新研究进展

热门文章

  1. MSSQL Express版本自动备份数据库
  2. 解析数据访问层操作数据库的方式
  3. Scikit-learn 更新至0.24版,这10个新特性你需要了解
  4. 2所“双一流”大学官宣:博士招生考试,延期!
  5. 卷积神经网络CNN是靠什么线索学习到深度信息的?
  6. 经验 | 上交机械本硕转计算机视觉岗位面经
  7. INTERSPEECH2020大会收录了哪些论文?
  8. 数据结构期末复习之平衡二叉树
  9. 村土地利用规划和村庄规划的区别和联系
  10. 直线和圆交点 halcon_人教版六年级上册数学第五单元《圆》5.1 圆的认识