bbs-admin-自定义admin(一)
自定义admin
概要:django-admin本质就是一个app,只是Django内部分装了,因此我们尝试自己设计一个简易版的admin
设计前知识补充:
model._meta.app_label:获该类所在的app名
model._meta.model_name:获该类的类名
model:类
config_obj:配置类对象对象
设计思路
1 在uls.py文件中,模仿admin url(r'^admin/', admin.site.urls)
我们可以设计一个名为stark的app,
2 创建stark模块,基础配置按app方法来,其中创建一个servers文件,写我们自己的模块
3 按照admin源码解析的思路:启动--->注册----->url设计
4 启动:
1 扫描 ---{扫描所有app下的stark文件}
这里有个ready函数,在启动时执行,我们利用这个函数完成扫描功能
在apps.py下
from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules class StarkConfig(AppConfig):
name = 'stark'
def ready(self):
autodiscover_modules('stark')
注册
目的:将所有的模型类,及模型类对象,以键值对的形式保存在site._registry
这里需要一个单例模式的对象site,及默认模型类
在stark下的servers文件下的sites文件进行设计
# 默认模型类
class ModelStark: pass # 单例site模型类
class StarkSite(object): def __init__(self):
self._registry = {} def register(self ,model ,admin_class=None):
if not admin_class:
admin_class = ModelStark
self._registry[model] = admin_class(model) site = StarkSite()
然后在app下的stark文件下进行注册
from stark.servers import sites
from app01.models import Author, Book, Publish, AuthorDetail sites.site.register(Author)
class BookConfig(sites.ModelStark):
list_display = ['title','price']
sites.site.register(Book,BookConfig)
sites.site.register(Publish)
sites.site.register(AuthorDetail)
如果我们需要自定义模型
按照admin的方式来就行了,只不过继承的是我们定义的默认模型类
url设计
参考多级路由:
难点:三级路由
url_list = url(r'{}/{}/'.format(model._meta.app_label,model._meta.model_name),config_obj.urls)
解析:config_obj:配置类对象对象,我们在配置类对象中设计三级路由,及所对应的视图函数
优点:我们可以从视图函数中直接取到配置类的对象,由于 self.model = model 我们还可以取到对应的表
实际操作:
urls.py中
urlpatterns = [
url(r'^admin/', admin.site.urls),
#
# url(r'index',([
# url(r'^$',index),
# url(r'test01',test01),
# url(r'test02',test02)
# ],None,None))
url(r'^stark/', sites.site.urls)
]
自定义的sites.py中
from django.conf.urls import url
from django.shortcuts import render, HttpResponse, redirect class ModelStark:
list_display = []
def __init__(self,model):
self.model = model
def show(self,request):
print('>>>>>>>',self.model,self.list_display)
show_obj = self.model.objects.all()
return render(request,'show.html',{'show_obj':show_obj})
def add(self,request):
add_obj = self.model.objects.all()
return render(request,'add.html',{'add_obj':add_obj})
def change(self,request,id):
change_obj = self.model.objects.all()
return render(request,'change.html',{'change_obj':change_obj})
def delete(self,request,id):
delete_obj = self.model.objects.all()
return render(request,'delete.html',{'delete_obj':delete_obj})
def get_urls(self):
item = [
url(r'^$',self.show),
url(r'add/',self.add),
url(r'(\d+)/change/', self.add),
url(r'(\d+)/delete', self.delete),
]
return item
@property
def urls(self):
return self.get_urls(),None,None
class AdminSite(object): def __init__(self):
self._registry = {} def register(self ,model ,admin_class=None):
if not admin_class:
admin_class = ModelStark
self._registry[model] = admin_class(model)
def get_urls(self):
item = []
for model, config_obj in self._registry.items():
url_list = url(r'{}/{}/'.format(model._meta.app_label,model._meta.model_name),config_obj.urls)
item.append(url_list)
print('--->',item)
return item @property
def urls(self):
# print('----000--->',self._registry)
return self.get_urls(), None, None
site = AdminSite()
bbs-admin-自定义admin(一)的更多相关文章
- Django 中自定义 Admin 样式与功能
目录 自定义 Admin 样式与功能 1 页面修改中文 1.1 语言设置为中文 1.2 应用管理设置为中文 1.3 数据库表设置为中文 1.4 数据库表字段名称修改为中文 2 修改后台样式 2.1 安 ...
- Part 7:自定义admin站点--Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- 自定义admin(self_admin)
admin.site.register(models.UserInfo)admin.site.register(models.Book,Book_admin)######当下面注册的这个表里面没有这个 ...
- django admin自定义
django admin自定义 class CustomerAdmin(admin.ModelAdmin): list_display = ('id','name','qq','consultant' ...
- 自定义admin管理工具(stark组件)
自定义admin管理工具(stark组件) 创建项目 了解了admin的功能后,我们可以开始仿照admin编写我们自己的管理工具stark组件 首先创建一个新的项目,并创建三个app stark就是我 ...
- 自定义admin
平时我们用的django自带admin,怎么评价呢?一个字简陋,而且也人性化,如下图,首先只显示数据对象,如果要查看详细还有点进去,其次不能对自己想要的数据进行刷选 我们的期望是:数据如excel显示 ...
- 模拟Django的admin自定义stark组件
1.新建Django项目--新建app:app01和stark--在settings中配置app和数据库--在models.py中新建模型表--完成数据库迁移 2.在stark下的apps.py中: ...
- 第一个Django应用 - 第七部分:自定义admin
Django的admin站点是自动生成的.高度可定制的,它是Django相较其它Web框架独有的内容,广受欢迎.如果你觉得它不够美观,还有第三方美化版xadmin.请一定不要忽略它,相信我,它值得拥有 ...
- Django之model admin自定义后台管理
Admin管理界面是django的杀手级应用.它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即向网站中添加内容. 比如,数据表如下: from django.db ...
- ERRORS:<class 'Salesman.admin.UsrMngUserAdmin'>: (admin.E005) Both 'fieldsets' and 'fields' are specified.
在使用django admin的过程中 遇到了这个错误 . Both 'fieldsets' and 'fields' are specified. django.core.management.ba ...
随机推荐
- jquery【点击】导航按钮的来回切换
先获取元素的属性值,根据属性值进行判断,点击时对属性进行设置 <i class="layui-icon layui-icon-shrink-right" id="n ...
- phpstorm右侧边栏怎么打开?
开启PHPstorm右侧边栏的方法: 一般phpstorm默认只能打开10个文件,超过就隐藏了,想要打开更多:
- vue—组件通信,ref
组件通信: 父组件传递子组件: 把需要的数据 传递给 子组件的数据,以数据绑定(v-bind)的形式,传递到子组件内部,供子组件使用,缩写(:) 动态传递: 第一步:在父组件中的子组件标签中进行动态的 ...
- 【Trie】Phone List
[题目链接]: https://loj.ac/problem/10049 [题意] 问是否存在一组公共前缀.如果存在输出“NO”,否则输出“YES” [题解] 首先建出Trie树来,然后开始记录所有的 ...
- 第一讲,DOS头文件格式
今天讲解PE文件格式的DOS头文件格式 首先我们要理解,什么是文件格式,我们常说的EXE可执行程序,就是一个文件格式,那么我们要了解它里面到底存了什么内容 简短的说明. 我们要知道,PE文件格式,是微 ...
- Redis 的订阅发布(PUB/SUB)示例
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("127.0.0.1"); ISubscriber sub ...
- Web API 实体对象Get请求参数为null
实体对象前加上 [FromUri] 特性
- Eclipse MyEclipse 反编译.class文件 myeclipse source not found
首先,需要下载两个必须的插件包. 一个是:准备反编译需要的jad.exe 下载地址:http://varaneckas.com/jad/ 二个是:反编译编辑器net.sf.jadclipse_3.3. ...
- 单变量图形的pandas方法
数据加载与展示: 1. 类别数据的Bar图 1.1 每一类对应有多少个 1.2 每类数量占整体的比值 1.3 对X轴进行排序
- scroll滚动条掩藏
掩藏scroll滚动条::-webkit-scrollbar ::-webkit-scrollbar {} /* 1 */ ::-webkit-scrollbar-button {} /* 2 */ ...