开发django管理后台
- 配置admin进行操作
- 定制admin
- 复用admin
配置admin进行操作
采用文档的原话:管理有很多用于定制的钩子,但要注意不要试图专门使用这些钩子。如果您需要提供一个更以流程为中心的接口,抽象掉数据库表和替代的实现细节,那么可能是时候编写自己的视图了
编写blogAdmin代码
1 | from django.contrib import admin |
接下激活虚拟环境
执行命令
1 | manage.py createsuperuser |
修复小bug
因为我们的模型都是有关联作者的,这个时候实际上fields上面是缺少作者选项的。添加进去就可以了。但是会存在任何作者把创建的内容改为任意作者。这个时候我们需要重写savemodel方法,引用官方文档说明:
修改代码后如下:
1 | from django.contrib import admin |
运行结果如下:
对于django2.1下没有查看的权限可以参考https://blog.csdn.net/u011519550/article/details/100171861
同时:如果只想看到自己建立的数据可以:
细致的配置post管理后台
1.先说2个东西
1 | # 一个可以用来解析视图甚至admin,从url中寻找路径 |
2.增加以下代码
1 |
|
同理如果我们要增加分类下面有多少文章可以
1 | def post_count(self, obj): |
还有一个问题我们要显示文案的名字需要重写 str方法 每个model需要重写此方法
1 | def __str__(self): |
展示为:
照猫画虎(comment与和config)
comment
1 | from django.contrib import admin |
config
1 | from django.contrib import admin |
最后效果如下:
admin定制
自定义过滤器
只能过滤当前用户的文章,代码如下:在PostAdmin上面添加
1 | class CategoryOwnerFilter(admin.SimpleListFilter): |
解释说明:
title: 用于展示标题
parameter_name: 查询时url参数的名字相当于?owner_category=1,可以根据配置简答的过滤器来观察参数
lookups: 返回要展示的内容和查询用的id
queryset: 根据url Query的内ring返回列表页数据。 ?owner_category=1 那么self.value就是1
列表数据过滤
解决用户在列表页只看到自己创建的文章
在PostAdmin中重写get_queryset方法
1 | def get_queryset(self, request): |
admin编辑页面配置
1 | exclude = ('owner',) # 可以用于排除不需要什么样的字段 |
fieldsets控制页面布局
1 | fieldsets = ( |
自定义静态资源引入
在PostAdmin下:
1 | class Media: |
自定义form
利用modelForm可以定制,比如文章描述字段希望是textarea
Form是和model耦合在一起的。Form的逻辑和model是一致的,model是对数据库字段的抽象,form是对用户输入以及model展示数据的抽象
1 | from django import forms |
同一页面编辑关联数据
分类下面可以编辑文章
1 | class PostInline(admin.TabularInline): # 也有stackedInline |
定制站点
讲文章分类等数据的管理与用户模块等分开
定义一个custom_site.py
1 | from django.contrib.admin import AdminSite |
PostAdmin中修改为
1 | from djwwj.custom_site import custom_site |
最后更改url
1 | from .custom_site import custom_site |
其实就是通过两套url对业务进行了划分
权限和用户
用户以及权限可以参考文档
https://zhuanlan.zhihu.com/p/26188198
https://docs.djangoproject.com/zh-hans/3.1/topics/auth/default/
https://docs.djangoproject.com/zh-hans/3.1/topics/auth/customizing/
操作日志
如果是大型项目针对业务可以参考 https://www.cnblogs.com/gaosai/p/10322924.html
关于自带的LogEntry 参考https://www.wandouip.com/t5i330704/
1 | from django.contrib.admin.models import LogEntry |