自定义组件Xadmin
步骤如下:
- 启动时自动发现
- 注册
- 设计 url
启动:
1、创建 Django 项目,创建两个 app(app01 和 Xadmin),其中 Xadmin 作为一个组件;
2、在 app01 的应用中创建新的 Xadmin.py 文件
3、在 settings.py 中添加应用
INSTALLED_APPS = [
...
'Xadmin.apps.XadminConfig',
'app01.apps.App01Config',
]
1
2
3
4
5
2
3
4
5
4、配置 Xadmin 应用中的 apps.py 文件
from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules
class XadminConfig(AppConfig):
name = 'Xadmin'
def ready(self):
autodiscover_modules('Xadmin')
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
注册:
5、在 Xadmin 项目中新增一个 package dir,在里面新增一个 Xadmin.py 文件,如下:
6、在 Xadmin.py 中新增一个类,类的内容如下:
class ModelXadmin(object):
def __init__(self, model, site):
self.model = model
self.site = site
class XadminSite(object):
def __init__(self):
self._registry = {}
def registry(self, model, admin_class=None, **options):
if not admin_class:
admin_class = ModelXadmin
self._registry[model] = admin_class(model, self)
# 单例模式
site = XadminSite()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
7、在 app01 应用中的 Xadmin.py 文件中注册我们的 Model
from Xadmin.service import Xadmin
from app01 import models
Xadmin.site.registry(models.UserInfo)
Xadmin.site.register(models.Article)
Xadmin.site.register(models.Article2Tag)
Xadmin.site.register(models.ArticleDetail)
Xadmin.site.register(models.ArticleUpDown)
Xadmin.site.register(models.Blog)
Xadmin.site.register(models.Category)
Xadmin.site.register(models.Comment)
Xadmin.site.register(models.Tag)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
设计 URL:
8、在主工程的 urls.py 文件中配置如下:
from django.conf.urls import url
from django.contrib import admin
from Xadmin.service import Xadmin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^Xadmin/', Xadmin.site.urls),
]
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
9、在 Xadmin 组件中的 Xadmin.py 文件中的代码如下:
from django.conf.urls import url
from django.shortcuts import HttpResponse
class ModelXadmin(object):
def __init__(self, model, site):
self.model = model
self.site = site
class XadminSite(object):
def __init__(self):
self._registry = {}
def register(self, model, admin_class=None, **options):
if not admin_class:
admin_class = ModelXadmin
self._registry[model] = admin_class(model, self)
def list_view(self, request):
return HttpResponse("list_view")
def delete_view(self,request, id):
return HttpResponse("delete_view")
def add_view(self,request):
return HttpResponse("add_view")
def change_view(self,request, id):
return HttpResponse("change_view")
def get_operate_urls(self):
"""
分发操作的urls
:return:
"""
operate_urls_list = [url(r'^$', self.list_view), url(r'^add/$', self.add_view),
url(r'^(\d+)/change/$', self.change_view), url(r'^(\d+)/delete/$', self.delete_view)]
return operate_urls_list
@property
def urls2(self):
return self.get_operate_urls(), None, None
def get_urls(self):
urlpatterns = []
for model, admin_class_obj in self._registry.items():
app_name = model._meta.app_label
model_name = model._meta.model_name
urlpatterns.append(url(r'^{0}/{1}/'.format(app_name, model_name), self.urls2))
return urlpatterns
@property
def urls(self):
return self.get_urls(), None, None
# 单例模式
site = XadminSite()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
然后启动服务便可通过类似如下 URL 进行访问:
127.0.0.1:8000/Xadmin/app01/book/
127.0.0.1:8000/Xadmin/app01/book/add/
127.0.0.1:8000/Xadmin/app01/book/1/change/
127.0.0.1:8000/Xadmin/app01/book/1/delete/
作者:
本文链接:https://jokerbai.com
版权声明:本博客所有文章除特别声明外,均采用 署名-非商业性-相同方式共享 4.0 国际 (CC-BY-NC-SA-4.0) 许可协议。转载请注明出处!
上次更新: 2025/07/19, 11:33:23
- 02
- 使用Zadig从0到1实现持续交付平台07-19
- 03
- 基于Jira的运维发布平台07-19