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)

最新文章

  1. FastDFS介绍
  2. 深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断
  3. javascript的笔记精简版
  4. C/C++中的实参和形参
  5. White Rectangles[HDU1510]
  6. tabbarcontroller 内嵌导航 控制器,2层push hide tabbar 后 ,第二层直接返回根视图控制器选择tabbarcontroller的其它vc 无法显示 tabbar的 问题解决方案
  7. linux学习笔记2:linux 下java开发的软件安装
  8. A Flock Of Tasty Sources On How To Start Learning High Scalability
  9. Jquery小东西收集
  10. Gradle 修改 Maven 仓库地址(转)
  11. python fabric远程操作和部署
  12. 洛谷P1856 [USACO5.5]矩形周长Picture
  13. CUDA跟OpenCV的混合编程,注意OpenCV需要重新编译
  14. BUGKU Misc 普通的二维码
  15. Gcode命令【转】
  16. linux tmux 工具使用 tmux.conf 文件
  17. C# 申请非托管内存
  18. JavaScript紧凑学习
  19. maven(6)------maven坐标分析
  20. PLSQL 误删表恢复操作

热门文章

  1. maven 解决jar冲突
  2. .NET Core Entity使用Entity Framework Core链接数据库
  3. PostgreSQL之时间戳自动更新
  4. Oracle 12c 添加scott用户
  5. Android——Broadcast Receive 相关知识总结贴
  6. Linux中搭建一个ftp服务器详解
  7. 配置yum软件仓库(redhat 7.0)
  8. C#面试题(转载)
  9. [原创]茗洋AaronYang的 jquery.myselect.js 我的一次前端突破[上]
  10. Java知多少(29)覆盖和重载