自定义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(一)的更多相关文章

  1. Django 中自定义 Admin 样式与功能

    目录 自定义 Admin 样式与功能 1 页面修改中文 1.1 语言设置为中文 1.2 应用管理设置为中文 1.3 数据库表设置为中文 1.4 数据库表字段名称修改为中文 2 修改后台样式 2.1 安 ...

  2. Part 7:自定义admin站点--Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...

  3. 自定义admin(self_admin)

    admin.site.register(models.UserInfo)admin.site.register(models.Book,Book_admin)######当下面注册的这个表里面没有这个 ...

  4. django admin自定义

    django admin自定义 class CustomerAdmin(admin.ModelAdmin): list_display = ('id','name','qq','consultant' ...

  5. 自定义admin管理工具(stark组件)

    自定义admin管理工具(stark组件) 创建项目 了解了admin的功能后,我们可以开始仿照admin编写我们自己的管理工具stark组件 首先创建一个新的项目,并创建三个app stark就是我 ...

  6. 自定义admin

    平时我们用的django自带admin,怎么评价呢?一个字简陋,而且也人性化,如下图,首先只显示数据对象,如果要查看详细还有点进去,其次不能对自己想要的数据进行刷选 我们的期望是:数据如excel显示 ...

  7. 模拟Django的admin自定义stark组件

    1.新建Django项目--新建app:app01和stark--在settings中配置app和数据库--在models.py中新建模型表--完成数据库迁移 2.在stark下的apps.py中: ...

  8. 第一个Django应用 - 第七部分:自定义admin

    Django的admin站点是自动生成的.高度可定制的,它是Django相较其它Web框架独有的内容,广受欢迎.如果你觉得它不够美观,还有第三方美化版xadmin.请一定不要忽略它,相信我,它值得拥有 ...

  9. Django之model admin自定义后台管理

    Admin管理界面是django的杀手级应用.它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即向网站中添加内容. 比如,数据表如下: from django.db ...

  10. 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 ...

随机推荐

  1. Django-报错信息及admin后台汉化

    django-admin 汉化 效果对比 django admin 后台 报错信息 配置 修改配置文件中的 LANGUAGE_CODE 与 TIME_ZONE 即可. 将 django admin 后 ...

  2. linux下mysql部署

    mysql 1.拓扑结构 mysql集群有如下三层: 应用程序层:负责与mysql服务器通信的各种应用程序. Mysql服务器层:处理SQL命令,并与NDB存储引擎通信和Mysql服务器. NDB集群 ...

  3. 【第一季】CH08_FPGA_Button 按钮去抖动实验

    [第一季]CH08_FPGA_Button 按钮去抖动实验 按键的消抖,是指按键在闭合或松开的瞬间伴随着一连串的抖动,这样的抖动将直接影响设计系统的稳定性,降低响应灵敏度.因此,必须对抖动进行处理,即 ...

  4. Django中ORM常用字段及字段参数

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  5. SqlServer2008 跨服务器同步数据

    最近工作中需要跨服务器同步数据,在数据库DB1中的表T1插入数据,同时触发T1的触发器(这里暂不讨论触发器的效率问题),向另一台服务器DB2中的相同的一张表T2插入数据,查看了一些资料说, 需要打开D ...

  6. sipp如何避免dead call

    uac 和 uas 都加上  -deadcall_wait 0

  7. Docker搭建Gitlab代码管理平台

    一.Gitlab的安装 宿主机环境: CentOS 7 docker docker-compose 1.查找镜像 docker search gitlab 2.拉取镜像 docker pull git ...

  8. 微信Emoji表情代码大全

    参考网址 因PC端微信表情包不全,部分表情在PC中有显示问题,手机端微信不存在此问题,或者可以使用文字[微笑]这种方式添加微信表情 含义 标准 DoCoMo KDDI 软银 谷歌 微信 ✂复制这列

  9. sql server 查看表中某一字段的排序规则

    SELECT o.name,o.object_id,c.name,c.column_id,c.collation_name   FROM sys.columns c      JOIN sys.obj ...

  10. LCD1602 液晶

    它是一种专门用来显示字母.数字.符号的点阵型液晶模块 它是由若干个5x7或者5x10的点阵字符位组成 引脚 时序 操作步骤 初始化 写命令(RS=L)设置显示坐标 写数据(RS=H) 指令 清屏: 指 ...