内容回顾:

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组件的更多相关文章

  1. 【django之stark组件】

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

  2. django 之 stark组件

    ----------------------------------------------------------------烦恼没完没了,内心动荡不安,呜呼哀哉. 一.有个特殊的需求,需要用sta ...

  3. 设计stark组件

    设计stark组件 作者:Eric 微信:loveoracle11g 新建Django项目crm_1随便起名 然后再创建一个App manage.py@crm_1 > startapp star ...

  4. stark组件的分页,模糊查询,批量删除

    1.分页组件高阶 2.整合展示数据showlist类 3.stark组件之分页 3.stark组件之search模糊查询 4.action批量处理数据 4.总结 1.分页组件高阶 1.分页的class ...

  5. stark组件配置,二层URL

    1.django的admin配置 2 stark组件开发 3.2层url分发 4.小结 1.django的admin配置 model.py from django.db import models # ...

  6. CRM项目之stark组件

    . stark也是一个app(用startapp stark创建),目标时把这个做成一个可以拔插的组件 . setting文件下INSTALLED_APPS 路径要配置好(app的注册) . 写好si ...

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

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

  8. Django之stark组件

    现在让我说啥是stark组件,我也说不清楚.反正从今天讲的知识来看,今天完成的就是自己写一个模块,这个模块包含了admin后台管理工具的一些比较好用的功能,我们把它提炼出来,也就是相当于自己写一个ad ...

  9. CRM项目之stark组件(2)

    那么从今天开始呢,我们就要开始设计属于我们自己的admin组件,起个名字就叫stark吧(当然你愿意叫什么都可以). stark组件之四步走 仿照admin组件实现流程,stark组件要实现四件事情: ...

随机推荐

  1. VBA 连接文本的自定义函数(可用于数组公式)

    Function ConTxt(ParamArray args() As Variant) As VariantDim tmptext As Variant, i As Variant, cellv ...

  2. UI5-文档-2.1-使用OpenUI5开发应用

    使用OpenUI5和您选择的开发环境(编辑器和Web服务器)开发应用程序.您可以下载所有的源代码,也可以参考OpenUI5的在线版本. 下载OpenUI5 下载和安装OpenUI5的默认方式是从htt ...

  3. python post json applidation/json

    如果使用headers = {"Content-Type": "application/json"},在后台使用request.POST.get()无法获取数据 ...

  4. Jenkins服务器磁盘空间爆满问题解决

    现象: 从根目录开始,使用du -h -x --max-depth=1  查看哪个目录占用过高,打算对于过高目录中的内容适当删减腾出一些空间 通过追踪查询,发现是jenkins的构建纪录未清理,而且最 ...

  5. nginx 无法访问root权限的文件内容

    问题: 按照的nginx,nginx配置的user  是 nginx,nginx 是root用户启动的.  文件夹A放的那啥是root用户上传的文件. 可 nginx 无法访问 到  文件. 方法: ...

  6. scala-学习 2

    列表操作 List() 或者是 Nil 空list scala> val a = List() a:List[Nothing] = List() print(a.length) a.length ...

  7. servlet类

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  8. SQL事务日志备份时的问题

    1.在进行事务日志备份的时候,如下图: 3041 消息的疑难解答时的考虑事项:不会只是一个数据库或所有数据库出现问题吗?是备份到本地存储区或远程存储吗?哪种类型的备份 (数据库备份. 日志备份和差异备 ...

  9. URLconf

    URLconf 浏览者通过在浏览器的地址栏中输入网址请求网站,对于Django开发的网站,由哪一个视图进行处理请求,是由url匹配找到的 配置 在test3/settings.py中通过ROOT_UR ...

  10. Winsock版本的“hello world!”

    1.基于TCP协议的“hello world!” 1)服务器端:WSAStartup()->socket()->bind()->listen()->accept()->s ...