---恢复内容开始---

admin源码解析

一 启动:每个APP下的apps.py文件中。

首先执行每个APP下的admin.py 文件。

def autodiscover():
autodiscover_modules('admin', register_to=site)

二 注册:在admin中注册,那么我们在登录admin的后台管理的时候回显示出来

 class AdminSite(object):
def __init__(self, name='admin'):
self._registry = {}
def register(self, model_or_iterable, admin_class=None, **options):
if not admin_class:
admin_class = ModelAdmin # 配置类,我们可以通过继承此配置类来进行自定义配置类。 self._registry[model] = admin_class(model, self) # {Book:BookConfig(Book),Publish:ModelAdmin(Publish)} site=AdminSite()
class BookConfig(ModelAdmin):           #通过继承ModelAdmin来进行自定义配置类。顾名思义就是对我们的类进行配置,比如显示格式,搜索条件,分类依据等
      list_display=["",]

admin.site.register(Book,BookConfig)

admin.site.register(Publish)

那么我们在注册的时候可以看出admin.site是一个对象,那么这个对象有一个register的方法。而site从sites中导入。

① 进入admin源码:

② 进入sites源码:

③ register方法:

self._registry[model] = admin_class(model, self)
对应的输出结果为:
{
<class 'django.contrib.auth.models.Group'>: <django.contrib.auth.admin.GroupAdmin object at 0x00000256B97EF9E8>,
<class 'django.contrib.auth.models.User'>: <django.contrib.auth.admin.UserAdmin object at 0x00000256B9825438>,
<class 'app01.models.Book'>: <app01.admin.BookConfig object at 0x00000256B983C080>,
<class 'app01.models.Publish'>: <app01.admin.PublishConfig object at 0x00000256B983C128>
}
我们的键值都存在_registry中,我们可以通过for循环取出注册的类与其配置类的对象。

三 设置url:

设置url的目的是什么:

目的:为每一个注册的model设计增删该查4个url

            http://127.0.0.1:8000/admin/app01/book/
http://127.0.0.1:8000/admin/app01/book/add
http://127.0.0.1:8000/admin/app01/book/1/change/
http://127.0.0.1:8000/admin/app01/book/1/delete/

① 看admin源码如何实现url的设置。

② 进入site

③ 第二步其中有一个点:

四 仿照admin组件开发自定义stark组件:

一  既然是仿照admin组件,那么我们就按照admin的组件来设计。

①  当我们新建一个项目APP01 ,django会自动把APP01 添加到setting中的app_install中。

② 同时自动在APP01 下的apps中:

APPConfig中的方法:

    def ready(self):
"""
Override this method in subclasses to run code when Django starts.
    在子类中重写此方法,以便在Django启动时运行代码。这里我们就可以看出当我们进行stark重写的时候我们需要在apps中添加上这样一句:
     
 def ready(self):
          autodiscover_modules('stark')
"""

③ 我们需要在APP01 下的model中定义我们的类。

④ 同时在APP01 下的admin中进行注册。进行一些自定制的显示。

⑤ 设计url:

二 仿照admin组件设计stark组件:

① 新建一个APP名为stark,同时将APP添加到setting中的app_install列表中,把stark注册到我们的django中:

② 在app01 和 stark下分别创建一个stark.py文件。

app01 中的stark替代admin进行注册功能。

③ 在app01 下定义类。

④ 设计url,在stark中设计url。

注意!!!!

那么在仿照admin组件进行自定义的时候,有几点需要注意:

① 需要手动在setting中app_install列表中添加stark应用,同时在stark应用下的apps中手动添加:

在子类中重写此方法,以便在Django启动时运行代码。这里我们就可以看出当我们进行stark重写的时候我们需要在apps中添加上这样一句:
from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules class StarkConfig(AppConfig):
name = 'stark'
def ready(self):
autodiscover_modules('stark')

② 需要在app01 下的stark中进行注册。

③ 设计url的时候:

admin源码解析以及仿照admin设计stark组件的更多相关文章

  1. admin源码解析及自定义stark组件

    admin源码解析 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单 ...

  2. django之admin源码解析

    解析admin的源码 第一步:项目启动,加载settings文件中的 INSTALLED_APPS 里边有几个app就加载几个,按照注册顺序来执行. 第二步:其中加载的是admin.py,加载每一个a ...

  3. django -admin 源码解析

    admin源码解析 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单 ...

  4. Spring源码解析-ioc容器的设计

    Spring源码解析-ioc容器的设计 1 IoC容器系列的设计:BeanFactory和ApplicatioContext 在Spring容器中,主要分为两个主要的容器系列,一个是实现BeanFac ...

  5. day 65 crm(2) admin源码解析,以及简单的仿造admin组件

    前情提要: crm中的admin组件重写. 一:admin的autodiscover 作用:实现扫面该项目中的所有的admin 1:执行顺序-> 按照注册的顺序执行 二:单例模式 1:普通案例的 ...

  6. 6 admin(注册设计)源码解析、单例模式

    1.单例模式 https://www.cnblogs.com/yuanchenqi/articles/8323452.html 单例模式(Singleton Pattern)是一种常用的软件设计模式, ...

  7. Django框架 之 admin管理工具(源码解析)

    浏览目录 单例模式 admin执行流程 admin源码解析 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在 ...

  8. Django 之 admin组件使用&源码解析

    admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 settings.py 中的 INSTALLED ...

  9. 微服务配置中心 Apollo 源码解析——Admin 发送发布消息

    内容参考:https://www.toutiao.com/a6643383570985386509/ 摘要: 原创出处http://www.iocoder.cn/Apollo/admin-server ...

随机推荐

  1. 利用JSON将Map转换为类对象

    Map类型做为一种常见的Java类型,经常在开发过程中使用,笔者最近遇到要将Map对象做为一种通用的参数变量,下传到多个业务类方法中,然后在各个业务类方法中将Map转换为指定类对象的情况.如何将Map ...

  2. mysql之 mysql_config_editor/login-path 登录密码保护

    login-path是MySQL5.6开始支持的新特性.通过借助mysql_config_editor工具将登陆MySQL服务的认证信息加密保存在.mylogin.cnf文件(默认位于用户主目录) . ...

  3. taro 消息机制

    Taro 提供了 Taro.Events 来实现消息机制,使用时需要实例化它 同时 Taro 还提供了一个全局消息中心 Taro.eventCenter 以供使用,它是 Taro.Events 的实例 ...

  4. react-router、react-router-dom、react-router-native 关系

    react-router 为 React Router 提供核心路由功能,但是你不需要直接安装 react-router: 如果你写浏览器端应用,你应该安装 react-router-dom: 如果你 ...

  5. R语言入门

    引入R的package(库) 首先是要安装TSA库,TSA是作者自己开发的一套基于R的pacakge,里面包含了函数以及数据:安装的方式是在R的控制台(console)中敲入install.packa ...

  6. Java WebService 简单实例[转载]

    [注意,本文转载自  http://hyan.iteye.com/    ] 一.准备工作(以下为本实例使用工具) 1.MyEclipse10.7.1 2.JDK 1.6.0_22 二.创建服务端 1 ...

  7. Digispark kickstarter + JoyStick 模拟鼠标

    IDE:Arduino 1.0.4 一.线路连接 S-Y --> P5(A0) S-X --> P2(A1) S-K --> P0 VCC --> VCC GND --> ...

  8. shell脚本报错:-bash: xxx: /bin/sh^M: bad interpreter: No such file or directory --引用自http://blog.csdn.net/xiaaiwu/article/details/49126777

    windows下编辑然后上传到linux系统里执行的..sh文件的格式为dos格式.而linux只能执行格式为unix格式的脚本. 我们可以通过vi编辑器来查看文件的format格式.步骤如下: 1. ...

  9. centos6.5 系统乱码解决 i18n --摘自http://blog.csdn.net/yangkai_hudong/article/details/19033393

    二.终端. gedit 显示乱码 #vi /etc/sysconfig/i18n 将LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun ...

  10. BugFree使用技巧 转载

    转载 2013年05月27日 17:53:45 BugFree使用技巧 我们将会从使用Ldap域账号.使用标记.发送邮件通知.更改上传附件的大小和使用快捷键来进行讲解. 使用Ldap域帐号 如果希望使 ...