Admin执行步骤

启动文件:
1:创建app-----stark
2:在每个app中创建stark
3:django----admin----
4:在stark中写入:----------------------------------去以注册的所有的app中,找到stark.py文件并加载
from django.apps import AppConfig
class StarkConfing(AppConfig):
name = 'stark'
def ready(self):
from django.utils.module_loading import autodiscover_modules
autodiscover_modules('stark')
5:在settings中注册app:
路由系统:
一:运行程序,找到每个app下的admin.py执行并加载
1:--app01.admin.py
2:-创建admin.site中的对象---------------site下的----site = AdminSite()-----本质实例化一个对象
3:-执行对象的register方法---------------目的将注册类添加到_register中
4:--app02.admin.py
5:-用app01.admin.py创建的admin.site对象----site下的----site = AdminSite()----单例----以后不管谁来调用都使用这个对象。
admin.site是一个对象(单例模式创建),其中封装了_register
二:执行urls.py
1:--url(r'^admin/',admin.site.urls)----再次调用admin.site的urls属性
--admin.site.urls-----admin.site调用urls方法----(没加括号:在上面加@property,不加括号也能执行)
2:返回了一个元组,元组有三个元素------self.get_urls()----'admin'-----self.name
--@property
def urls(self):
return self.get_urls(), 'admin', self.name
--第一个是一个函数------self.get_urls()
--第一个函数返回的是一个列表-------列表中是url-------从某个地方读出来,放在列表中。
urlpatterns = [
url(r'^$', wrap(self.index), name='index'),
url(r'^login/$', self.login, name='login'),
url(r'^logout/$', wrap(self.logout), name='logout'),
url(r'^password_change/$', wrap(self.password_change, cacheable=True), name='password_change'),
url(r'^password_change/done/$', wrap(self.password_change_done, cacheable=True),
name='password_change_done'),
url(r'^jsi18n/$', wrap(self.i18n_javascript, cacheable=True), name='jsi18n'),
url(r'^r/(?P<content_type_id>\d+)/(?P<object_id>.+)/$', wrap(contenttype_views.shortcut),
name='view_on_site'),
]
----([],None,None)
3:去admin.site中读出类,生成url,放在列表中。
--循环admin.site中的_register--------(里面放的注册类)
for k,v in admin.site._register.items():------k是类名--------v---model_admin的对象
--找到类的名称,将k命名为model_class---(model中的类)
for model_class,v in admin.site._register.items():
类名clas_list = model_class._meta.model_name--------------获取当前类名
--找到app名称
app名称app_name = model_class._meta.app_lable-------------获取当前类所在的app名称
--生成url
ual = url(r''{0}/{1}.format(app_name,clas_list),函数名,name='函数名')---------/.头../app名称.../类名称..../
--添加到列表
url_list = []
url.append(ual)
--每个类的增,删,改,查,分别对应一个函数。
---admin.site.urls---返回一个元组(self.get_urls,None,None)----get_urls返回一个列表[uels]
路由include:---------通过反射找到模块-----------找到parent-------url
1:定义一个函数-----定义一个列表-----生成四个url(增删查改)-----返回
def get_urls()
temp= [
url(r'^$'.format(app_name,cls_name),chagelest_view),
url(r'^add/$'.format(app_name,cls_name),add_view),
url(r'^(\d+)del/$'.format(app_name,cls_name),del_view),
url(r'^(\d+)change/$'.format(app_name,cls_name),change_view),
]
return temp
--循环admin.site中的_register--------(里面放的注册类)
for k,v in admin.site._register.items():------k是类名
--找到类的名称,将k命名为model_class---(model中的类)
for model_class,v in admin.site._register.items():
类名clas_list = model_class._meta.model_name--------------获取当前类名
--找到app名称
app名称app_name = model_class._meta.app_lable-------------获取当前类所在的app名称
--生成url,再添加一个元组----第一个元素是get_urls[],第二和第三个为None.
ual = url(r'{0}/{1}/.format(app_name,clas_list)',include(get_urls,None,None))---------/.头../app名称.../类名称..../增删查改/
--添加到列表
url_list = []
url.append(ual)

Django----Admin流程的更多相关文章

  1. django之admin流程

    admin 类复习: class Base(object): def __init__(self,val): self.val = val def func(self): self.test() pr ...

  2. Django admin 组件 原理分析与扩展使用 之 sites.py (一)

    一 . 前言 Django 提供了admin 组件 为项目提供基本的管理后台功能(对数据表的增删改查). 本篇文章通过 admin源码 简单分析admin 内部原理 ,扩展使用方式,为以后进行定制和自 ...

  3. django的流程和命令行工具

    django实现流程django #安装: pip3 install django 添加环境变量 #1 创建project django-admin startproject mysite ---my ...

  4. Django Xadmin - 重构django admin

    一.Django admin的执行流程 https://www.cnblogs.com/weihengblog/p/9122509.html 我的博客,介绍了django admin执行流程 二.Xa ...

  5. 4-初识Django Admin

    初识Django Admin Django Admin是Django为我们提供的网站后台管理应用,通常网站,个人博客,CMS等都会有个后台管理界面,这个界面只有管理员权限的用户才能进入管理网站内容.管 ...

  6. Django admin美化插件suit应用[原创]

    前言 由于比较懒,自己弄了一个用户验证,没有自己写后台,用了django自带的user认证,并通过admin直接进行管理,但默认的admin并不漂亮,于是使用了这个django-suit插件,效果对比 ...

  7. Django admin 权威指南(一)

    版本: Django 1.10 此部分由官方文档<6.5.1 The Django admin site>翻译而来. 6.5.1.1 概览 默认情况下,使用startproject的时候, ...

  8. Django admin 显示图片

    我有一个表用来储存轮播图片,有一个 `picture` 字段储存的是图片的url,图片的 url 通过上传文件到 cdn 获得.目前这个表的编辑是通过自定义一个 `ModelForm`,然后重写 Dj ...

  9. [系统开发] Django Admin上传图片简单校验

    我的 models里有个ImageField字段,用来保存用户头像,希望通过Django Admin上传时校验头像大小,如果太大就报错,并且不保存. 网上有不少方法,有的通过第三方软件实现,有的通过自 ...

  10. SQLAlchemy连接数据库并在django admin显示

    SQLAlchemy 0.7     postgersql  9.0 SQLAlchemy连接数据库有两种方法,一种是classic,一种是modern 1,modern方法 from sqlalch ...

随机推荐

  1. 为什么和什么是 DevOps?

    原文地址 本文内容 为什么 DevOps 什么是 DevOps DevOps 所带来的好处 如何将 DevOps 落到实处? 关于 DevOps 的澄清 参考资料 编写软件之所以难,是因为没有哪两个软 ...

  2. Redis系列--内存淘汰机制(含单机版内存优化建议)

    https://blog.csdn.net/Jack__Frost/article/details/72478400?locationNum=13&fps=1 每台redis的服务器的内存都是 ...

  3. Uploadify导致Chrome频繁崩溃Crash

    上传功能是工作中经常会遇到的问题,应该作为开发标配的技能每个人都会. 我选用的是Uploadify 3.1.2进行上传,使用方法参考之前的一篇文章, 今天记录下一个我遇到的很神奇的bug chrome ...

  4. List stream 对象 属性去重

    单值去重不写了,记录对象去重 随手一个对象: @Data @AllArgsConstructor public class Milk { private Integer key; private St ...

  5. ceph 底层代码分享

    一.底层工作队列 二.对象操作 三.上下文(Context)代码分析:

  6. 深入理解Fsync

    1 介绍 数据库系统从诞生那天开始,就面对一个很棘手的问题,fsync的性能问题.组提交(group commit)就是为了解决fsync的问题.最近,遇到一个业务反映MySQL创建分区表很慢,仔细分 ...

  7. php手册总结《类》

    手册页面: http://php.net/manual/zh/language.oop5.basic.php >> 类名 类名可以是任何非 PHP 保留字的合法标签.一个合法类名以字母或下 ...

  8. 入门:移动APP中的各种导航

    即使是移动应用界面的原型设计,导航的形式也可以多种多样.尽管尺寸小,又必须紧凑排列大量数据,它们似乎受到了紧密的约束,但依然有着形形色色的选择. 人们曾经一度只会考虑一种形式——流行且广泛使用的垂直导 ...

  9. Atitit 数据融合merge功能v3新特性.docx

    Atitit 数据融合merge功能v3新特性.docx 1.1. 版本历史1 1.2. 生成sql结果1 1.3. 使用范例1 1.4. 核心代码1 1.1. 版本历史 V2增加了replace部分 ...

  10. pandas DataFrame.shift()函数

    pandas DataFrame.shift()函数可以把数据移动指定的位数 period参数指定移动的步幅,可以为正为负.axis指定移动的轴,1为行,0为列. eg: 有这样一个DataFrame ...