内容回顾:

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. UI5-文档-4.25-Sorting and Grouping

    为了使我们的发票列表更加用户友好,我们将它按字母顺序排序,而不是仅仅显示来自数据模型的顺序.此外,我们还引入了组,并添加了发布产品的公司,以便更容易使用数据. Preview The list is ...

  2. 【Web缓存机制系列】2 – Web浏览器的缓存机制

    Web缓存的工作原理 所有的缓存都是基于一套规则来帮助他们决定什么时候使用缓存中的副本提供服务(假设有副本可用的情况下,未被销毁回收或者未被删除修改).这些规则有的在协议中有定义(如HTTP协议1.0 ...

  3. hadoop配置文件的参数含义说明

    #hadoop version 查看版本号 1 .获取默认配置 hadoop2系列配置文件一共包括6个,分别是hadoop-env.sh.core-site.xml.hdfs-site.xml.map ...

  4. Haskell语言学习笔记(52)正则表达式

    Text.Regex.PCRE.Heavy $ brew install pcre $ cabal install pcre-heavy Installed pcre-heavy-1.0.0.2 Pr ...

  5. 疯狂JAVA——第六章 面向对象(下)

    6.1包装类 java为了照顾程序员的传统习惯,所以提供了八种基本数据类型.但也带来不方便,例如所有引用类型都继承自Object类,都可当做Object类型变量使用.但基本数据类型的变量就不可以.如果 ...

  6. java 解析命令行参数

    下载地址: https://jcenter.bintray.com/org/apache/commons/com.springsource.org.apache.commons.cli/1.2.0/ ...

  7. Linux查看内存使用情况

    输入:top PID:进程的ID USER:进程所有 PR:进程的优先级别,越小越优先被执 NInice: VIRT:进程占用的虚拟内 RES:进程占用的物理内 SHR:进程使用的共享内 S:进程的状 ...

  8. 消息 14607,级别 16,状态 1,过程 sp_send_dbmail,第 141 行 profile 名称无效

    错误:消息 14607,级别 16,状态 1,过程 sp_send_dbmail,第 141 行profile 名称无效 原因: 用SA帐户是可以发送邮件的,但换了另外一个帐户后却提示以上错误. 解决 ...

  9. WebDriverException: Message: f.QueryInterface is not a function

    WebDriverException: Message: f.QueryInterface is not a function 使用webdriver打开c.highpin.cn,结果报错,见下图: ...

  10. zoj1004-Anagrams by Stack 【栈 dfs】

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4 Anagrams by Stack Time Limit: 2 Seconds ...