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组件要实现四件事情: ...
随机推荐
- VBA 连接文本的自定义函数(可用于数组公式)
Function ConTxt(ParamArray args() As Variant) As VariantDim tmptext As Variant, i As Variant, cellv ...
- UI5-文档-2.1-使用OpenUI5开发应用
使用OpenUI5和您选择的开发环境(编辑器和Web服务器)开发应用程序.您可以下载所有的源代码,也可以参考OpenUI5的在线版本. 下载OpenUI5 下载和安装OpenUI5的默认方式是从htt ...
- python post json applidation/json
如果使用headers = {"Content-Type": "application/json"},在后台使用request.POST.get()无法获取数据 ...
- Jenkins服务器磁盘空间爆满问题解决
现象: 从根目录开始,使用du -h -x --max-depth=1 查看哪个目录占用过高,打算对于过高目录中的内容适当删减腾出一些空间 通过追踪查询,发现是jenkins的构建纪录未清理,而且最 ...
- nginx 无法访问root权限的文件内容
问题: 按照的nginx,nginx配置的user 是 nginx,nginx 是root用户启动的. 文件夹A放的那啥是root用户上传的文件. 可 nginx 无法访问 到 文件. 方法: ...
- scala-学习 2
列表操作 List() 或者是 Nil 空list scala> val a = List() a:List[Nothing] = List() print(a.length) a.length ...
- servlet类
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- SQL事务日志备份时的问题
1.在进行事务日志备份的时候,如下图: 3041 消息的疑难解答时的考虑事项:不会只是一个数据库或所有数据库出现问题吗?是备份到本地存储区或远程存储吗?哪种类型的备份 (数据库备份. 日志备份和差异备 ...
- URLconf
URLconf 浏览者通过在浏览器的地址栏中输入网址请求网站,对于Django开发的网站,由哪一个视图进行处理请求,是由url匹配找到的 配置 在test3/settings.py中通过ROOT_UR ...
- Winsock版本的“hello world!”
1.基于TCP协议的“hello world!” 1)服务器端:WSAStartup()->socket()->bind()->listen()->accept()->s ...