s111 stark组件
内容回顾:
1. 类当做key
2. django中的model所在app名称、以及小写类名。
def index(request):
# print(m1.UserInfo,m1.UserInfo._meta.app_label,m1.UserInfo._meta.model_name)
# print(m2.Role,m2.Role._meta.app_label,m2.Role._meta.model_name)
# 获取当前models类所在app名称、以及小写类名。
_registry = {
m1.UserInfo:'1',
m2.Role:'2',
}
for k,v in _registry.items():
print(k._meta.app_label,k._meta.model_name)
所在app名称 模块名(类名)
return HttpResponse('...')app01 userinfo
app02 role
今日内容:
1. stark介绍
快速完成对N张表增删改查+自定义复杂操作。
2. 单例模式
3. 路由系统
4. 启动后、路由加载前定制一段代码。
5. 参考django admin源码编写组件。
内容详细:
1. stark介绍
快速完成对N张表增删改查+自定义复杂操作。
2. 单例模式
这么写:
stark.py
class Adminstark(object):
pass
site = Adminstark()
调用实例:
import stark
stark.site
stark.site

单例模式/lewen.py
class AdminSite(object): def __init__(self):
self._registry = {} obj1 = AdminSite() 2.单例模式/lemi.py import lewen
lewen.obj1._registry['k2'] = 666
print(lewen.obj1) 2.单例模式/kevin.py
import lewen lewen.obj1._registry['k1'] = 123
import lemi print(lewen.obj1)
print(lewen.obj1._registry) 虽然导入了两次,但内存地址一样
# <lewen.AdminSite object at 0x0000026419BB7A58>
# <lewen.AdminSite object at 0x0000026419BB7A58>
# {'k1': 123, 'k2': 666}
单例模式
任何去导入lewen模块的就会执行, obj1 = AdminSite() ,
因为单列模式是所有调用的共用一个对象,如果每次调用,经构造方法绑定的值不做存储,那么会后面调用模块设置的值覆盖掉。
可以在单列模式内部用一个静态字段存储每次的不同调用设置的值。
3. 路由系统
- include
- namespace

- 补充:
项目/urls.py
from django.conf.urls import url,include
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.stark.urls),
url(r'^rbac/', ([
url(r'^login/', views.login),
url(r'^logout/', views.logout),
url(r'^x1/', ([
url(r'^add/', views.add,name='n1'),
url(r'^change/', views.change,name='n2'),
],None,'xxx')),
],None,'rbac')),
]
app01/views.py
from django.shortcuts import render
from django.shortcuts import HttpResponse
from django.urls import reverse def login(request):
url1 = reverse('rbac:xxx:n1')
url2 = reverse('rbac:xxx:n2') print(url1)
print(url2)
return HttpResponse('login') def logout(request):
return HttpResponse('logout') def add(request):
return HttpResponse('add') def change(request):
return HttpResponse('change')
- 补充:
4. 启动后、路由加载前定制一段代码。
stark/service/stark.py 类似admin功能,提供表的注册
a. 创建一个stark app 组件
b. 编写ready方法
stark/app.py
from django.apps import AppConfig
class StarkConfig(AppConfig):
name = 'stark'
def ready(self):
"Override this method in subclasses to run code when Django starts."
from django.utils.module_loading import autodiscover_modules
autodiscover_modules('stark')
程序启动时,会先去每个app中找stark.py文件并加载。
c. 其他app中创建stark.py
d. 程序启动时便会自动加载 stark.py


class StarkConfig(object):
def __init__(self, model_class,site):
self.model_class = model_class
self.site = site def func(self):
print(self.model_class) def run(self):
self.func() class AdminSite(object):
def __init__(self):
self._registry = {}
self.app_name = 'stark'
self.namespace = 'stark' def register(self,model_class,stark_config=None):
# model_class=models.Role
# stark_config=None
if not stark_config: # 判断是否有自定义的配置,
stark_config = StarkConfig # 没有就用,默认的
# model_class=models.Role
# stark_config=RoleConfig
self._registry[model_class] = stark_config(model_class,self)
"""
{
models.UserInfo: StarkConfig(models.UserInfo), # 封装:model_class=UserInfo,site=site对象
models.Role: RoleConfig(models.Role) # 封装:model_class=Role,site=site对象
}
"""
for k,v in self._registry.items():
v.run()
# models.UserInfo,StarkConfig对象
# models.Role,RoleConfig对象 site = AdminSite()
stark/service/stark.py

from django.apps import AppConfig class StarkConfig(AppConfig):
name = 'stark' def ready(self):
"Override this method in subclasses to run code when Django starts."
from django.utils.module_loading import autodiscover_modules
autodiscover_modules('stark')
stark/apps.py

app01/models.py
from django.db import models
class UserInfo(models.Model):
title = models.CharField(max_length=32) app01/stark.py
from stark.service.stark import site
from app01 import models
site.register(models.UserInfo)
app01/stark.py
s111 stark组件的更多相关文章
- 【django之stark组件】
一.需求 仿照django的admin,开发自己的stark组件.实现类似数据库客户端的功能,对数据进行增删改查. 二.实现 1.在settings配置中分别注册这三个app # Applicatio ...
- django 之 stark组件
----------------------------------------------------------------烦恼没完没了,内心动荡不安,呜呼哀哉. 一.有个特殊的需求,需要用sta ...
- 设计stark组件
设计stark组件 作者:Eric 微信:loveoracle11g 新建Django项目crm_1随便起名 然后再创建一个App manage.py@crm_1 > startapp star ...
- stark组件的分页,模糊查询,批量删除
1.分页组件高阶 2.整合展示数据showlist类 3.stark组件之分页 3.stark组件之search模糊查询 4.action批量处理数据 4.总结 1.分页组件高阶 1.分页的class ...
- stark组件配置,二层URL
1.django的admin配置 2 stark组件开发 3.2层url分发 4.小结 1.django的admin配置 model.py from django.db import models # ...
- CRM项目之stark组件
. stark也是一个app(用startapp stark创建),目标时把这个做成一个可以拔插的组件 . setting文件下INSTALLED_APPS 路径要配置好(app的注册) . 写好si ...
- stark组件开发之列表页面应用示例
已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把! 应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的 <a href="/ ...
- Django之stark组件
现在让我说啥是stark组件,我也说不清楚.反正从今天讲的知识来看,今天完成的就是自己写一个模块,这个模块包含了admin后台管理工具的一些比较好用的功能,我们把它提炼出来,也就是相当于自己写一个ad ...
- CRM项目之stark组件(2)
那么从今天开始呢,我们就要开始设计属于我们自己的admin组件,起个名字就叫stark吧(当然你愿意叫什么都可以). stark组件之四步走 仿照admin组件实现流程,stark组件要实现四件事情: ...
随机推荐
- bootstrap 移动自适应界面
移动设备优先 在 Bootstrap 2 中,我们对框架中的某些关键部分增加了对移动设备友好的样式.而在 Bootstrap 3 中,我们重写了整个框架,使其一开始就是对移动设备友好的.这次不是简单的 ...
- java web 跨域
服务器端解决跨域问题的三种方法 跨域是指html文件所在的服务器与ajax请求的服务器是不同的ip+port,例如: - ‘192.168.1.1:8080’ 与 ‘192.168.1.2:808 ...
- ubuntu 16.04 完整安装 phantomjs
摘自 stackoverflow sudo apt-get install nodejssudo apt-get install nodejs-legacysudo apt-get install n ...
- 多个jsp页面共享Java bean
通过jsp的内置对象—request对象获取参数: 通过超链接传参: 例:把a.jsp中i的值传到b.jsp中: 在a.jsp页面中的核心代码为: <a href="b.jsp?i=1 ...
- Linux运维就业技术指导(九)期末架构考核
一,毕业架构设计考核筹备 1.1,架构图模板示例 1.1.1 架构图(一)概述 本架构是4层lvs负载均衡给后方7层nginx反向代理: 业务进行了动静分离: 数据库前端有memcached缓存组,降 ...
- Eclipse中Git插件使用技巧:还原文件
如果修改了某个文件并未提交至本地库(add index),那么怎么还原呢?Git插件中并不像Svn插件直接提供有还原方式.其实无论是否提交至本地库或者远程库,还原操作的本质都是将文件的当前版本还原至之 ...
- jquery获取input file的文件名,具有兼容性
var str=$(this).val();var arr=str.split('\\');//注split可以用字符或字符串分割var fileName=arr[arr.length-1];//这就 ...
- Oracle的下载、安装和配置
win10下Oracle的下载.安装和配置 --------------siwuxie095 1.首先到Oracle官网下载Oracle,中文版官网,传送阵:点 ...
- FileUpload控件实现单按钮图片自动上传并带预览显示
FileUpload控件实现单按钮图片自动上传并带预览显示 1.实现原理: FileUpload控件默认不支持服务端的ONCHANGE事件,此时用一种变通的方法借用客户端的onchange事件,调 ...
- 根据二进制和十进制转换规则转换成游戏[xyytit]
摘要: 二進位是由十進位轉換而成,它的數字都由1.0組成的.我們研究發現由十進位轉換而成的二進位的數字可以不只局限在於1~127,它的數可以更加深加廣,並且可以利用二進位的規則轉換成遊戲.我們利用2n ...