Django----Admin流程
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流程的更多相关文章
- django之admin流程
admin 类复习: class Base(object): def __init__(self,val): self.val = val def func(self): self.test() pr ...
- Django admin 组件 原理分析与扩展使用 之 sites.py (一)
一 . 前言 Django 提供了admin 组件 为项目提供基本的管理后台功能(对数据表的增删改查). 本篇文章通过 admin源码 简单分析admin 内部原理 ,扩展使用方式,为以后进行定制和自 ...
- django的流程和命令行工具
django实现流程django #安装: pip3 install django 添加环境变量 #1 创建project django-admin startproject mysite ---my ...
- Django Xadmin - 重构django admin
一.Django admin的执行流程 https://www.cnblogs.com/weihengblog/p/9122509.html 我的博客,介绍了django admin执行流程 二.Xa ...
- 4-初识Django Admin
初识Django Admin Django Admin是Django为我们提供的网站后台管理应用,通常网站,个人博客,CMS等都会有个后台管理界面,这个界面只有管理员权限的用户才能进入管理网站内容.管 ...
- Django admin美化插件suit应用[原创]
前言 由于比较懒,自己弄了一个用户验证,没有自己写后台,用了django自带的user认证,并通过admin直接进行管理,但默认的admin并不漂亮,于是使用了这个django-suit插件,效果对比 ...
- Django admin 权威指南(一)
版本: Django 1.10 此部分由官方文档<6.5.1 The Django admin site>翻译而来. 6.5.1.1 概览 默认情况下,使用startproject的时候, ...
- Django admin 显示图片
我有一个表用来储存轮播图片,有一个 `picture` 字段储存的是图片的url,图片的 url 通过上传文件到 cdn 获得.目前这个表的编辑是通过自定义一个 `ModelForm`,然后重写 Dj ...
- [系统开发] Django Admin上传图片简单校验
我的 models里有个ImageField字段,用来保存用户头像,希望通过Django Admin上传时校验头像大小,如果太大就报错,并且不保存. 网上有不少方法,有的通过第三方软件实现,有的通过自 ...
- SQLAlchemy连接数据库并在django admin显示
SQLAlchemy 0.7 postgersql 9.0 SQLAlchemy连接数据库有两种方法,一种是classic,一种是modern 1,modern方法 from sqlalch ...
随机推荐
- Android性能优化-App启动优化
原文地址:https://developer.android.com/topic/performance/launch-time.html#common 通常用户期望app响应和加载速度越快越好.一个 ...
- linux nfs共享文件
linux文件共享可以有多种方式:samba,nfs,ftp等等 nfs在linux之间效率高些: function nfs(){ share_folder="/data1 192.168. ...
- Apache学习---多进程处理模块(MPM)原理详解
查看Apache的模式,可以使用httpd -V命令来查看: 1. prefork MPM prefork模式可以算是很古老但是非常稳定的Apache模式.Apache在启动之初,就预先fork一些子 ...
- 电子证书 DER & PEM & CRT & CER
原文链接: http://blog.csdn.net/zqt520/article/details/26966603 证书与编码 本至上,X.509证书是一个数字文档,这个文档根据RFC 5280来编 ...
- springboot1.5.4 log4j
resources下面添加: log4j.properties: # log4j.rootCategory=INFO, stdout, file, errorfile log4j.category.c ...
- Windows 7 设置允许多用户同时远程桌面连接
有时候我们服务器安装的是Win7系统,远程登录桌面时,即使登录的是不同的管理账号,还是会提示把远程登录的人给踢下来.即系统只允许存在一个远程会话窗,不管是不是相同的用户. 下面讲解如何设置Win7让多 ...
- 盒型图(boxplot)
最近在摆弄数据离散度的时候遇到一种图形,叫做盒图(boxplot).它对于显示数据的离散的分布情况效果不错. 盒图是在1977年由美国的统计学家约翰·图基(John Tukey)发明的.它由五个数 ...
- 申请IPV6地址配置IPV6域名
0. 前言 最近弄了一下IPV6,虽然不知道什么时候会用到,但是服务器支持IPV6,还是有必要的. 1. 申请IPV6地址 https://tunnelbroker.net/ 到这个网址去注册一个帐号 ...
- 【emWin】例程二十八:窗口对象——Menu
简介: MENU 小工具可用于创建若干种菜单.每个菜单项代表一个应用程序命令或 子菜单.MENU 可水平显示和/ 或垂直显示.菜单项可使用分隔符进行分组.水 平菜单和垂直菜单均支持分隔符.选择一个菜单 ...
- Git 审查更改
但查看提交详细资料后,Jerry 实现字符串的长度不能为负数,所以他决定改变my_strlen函数的返回类型. Jerry 使用git日志命令来查看日志信息. [jerry@CentOS projec ...