Django入门教程

前言

第一章: django快速入门

第二章: django MTV架构

第三章: django视图

第四章: django模板

第五章: django模型

第六章: django后台管理系统

第七章: 项目实战-简易的博客系统

第八章:django表单

第九章:django用户认证系统

第十章:django中的会话

第十一章:django安全

第十二章:django性能优化

第十三章:django实用工具

首页 > Django入门教程 > 第六章: django后台管理系统 > 6.2节: AdminSite对象

6.2节: AdminSite对象

薯条老师 2020-08-14 07:43:01 235711 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

6.2.1 AdminSite对象

6.1节的内容中使用了admin.site.register方法来注册模型,执行admin.site时,django会构造一个名为admin的AdminSite对象。django使用AdminSite对象对站点后台进行管理,可以说一个AdminSite对象即对应于一个后台管理系统,通过覆盖AdminSite对象的属性和方法,可以对后台站点进行自定义。本节内容着重对AdminSite对象进行讲解,学习的是AdminSite类型的构造函数,以及AdminSite对象的常用属性和方法。

 6.2.2 AdminSite类型的构造函数

AdminSite(name='admin')

参数name用来表示一个唯一的AdminSite实例对象。

代码实例:

blog_admin = AdminSite(name='BlogAdmin')user_admin = AdminSite(name='UserAdmin')

在上文代码中,blog_admin与user_admin即表示不同的AdminSite对象,在实际开发中如需对模型进行分开管理,可以实例化多个AdminSite对象。例如在上文的代码中,blog_admin用来对博客文章进行管理,user_admin用来对站点的用户进行管理,那么在urls.py中的配置为:

# blog为笔者创建的django应用
from blog.admin import blog_admin,user_admin
urlpatterns = [    
    path('blog_admin/', blog_admin.site.urls),  
    path('user_admin/', user_admin.site.urls),
]

6.2.3 AdminSite对象的常用属性

属性名

描述

site_title

用来定义后台站点的页面标题名称,对应的是html的<title>标签

site_header

用来定义后台站点的页面顶部标题,对应的是html中的<h1>标签

site_url

用来定义站点首页的url,在对后台站点进行汉化以后,site_url对应的是后台页面'查看站点'所对应的链接。

index_title

用来定义后台首页的页面标题

index_template

用来定义后台首页的页面,需传递自定义的模板路径

login_template

用来定义登录页,需传递自定义的模板路径

现在通过覆盖AdminSite对象的属性,来对站点进行自定义。使用AdminSite对象进行站点自定义的核心流程:

(1) 从AdminSite中进行继承,对属性进行覆盖

代码实例:

from django.contrib import admin
# 导出AdminSite类
from django.contrib.admin import AdminSite
 
# 从models.py中导出Blog
from .models import Blog
 
# 定义ModelAdmin的子类型
class BlogAdmin(admin.ModelAdmin):
    pass
 
# 对AdminSite进行子类化,并覆盖其属性
class ChipsAdmin(AdminSite):
    site_title =  '薯条社区'
    site_header = '薯条社区后台管理系统'
    index_title = '薯条社区后台首页'
    
chips_admin_site = ChipsAdmin(name='chips')
# 通过AdminSite对象的register方法进行模型注册
chips_admin_site.register(Blog, BlogAdmin)

(2) 在urls.py中导出AdminSite的子类,重置路由

代码实例:

from django.urls import path,re_path
from django.contrib.auth import views as auth_views
from django.conf import settings
from django.conf.urls.static import static
 
import blog.views as blog

# 导出AdminSite的子类chips_admin_site
from blog.admin import chips_admin_site
 
urlpatterns = [
    # 重置后台的路由
        path('chips_admin/', chips_admin_site.urls),
    path('', chipscoco.Home.as_view()),
    path('arithmetic/', chipscoco.arithmetic),
    path('html/', chipscoco.Html.as_view()),
    re_path('blog/(\d+).html', chipscoco.blog),
 
]

登录页的页面效果:

 image.png

后台首页的页面效果:

image.png 

 

 

(3) AdminSite对象的常用方法

方法名

说明

has_permission

参数:

(1)request: HttpRequest对象

描述:

返回布尔类型,判断用户是否有权限进行页面的浏览。request对象中会携带一个user参数,默认设置为:user.is_active和user.is_staff都为True时才有权限进行页面的浏览。

register

参数:

(1)model_or_iterable:表示模型的类型名或一个可迭代对象,当传递可迭代对象时,会对迭代出的模型进行注册

描述:

不能对抽象基类进行注册,当模型已注册时会抛出AlreadyRegistered的错误异常

对has_permission方法进行覆盖,只允许超级管理员浏览后台页面:

from django.contrib import admin
# 导出AdminSite类
from django.contrib.admin import AdminSite
 
# 从models.py中导出Blog
from .models import Blog
 
# 定义ModelAdmin的子类型
class BlogAdmin(admin.ModelAdmin):
    pass
 
# 对AdminSite进行子类化,并覆盖其属性
class ChipsAdmin(AdminSite):
    site_title = '薯条社区'
    site_header = '薯条社区后台管理系统'
    index_title = '薯条社区后台首页'
 
    # 只允许超级管理员浏览后台页面
    def has_permission(self, request):
        if request.user.is_superuser:
            return True
        else:
            return False
 
chips_admin_site = ChipsAdmin(name='chips')
# 通过AdminSite对象的register方法进行模型注册
chips_admin_site.register(Blog, BlogAdmin)

6.2.4 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4)
Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:


欢迎 发表评论: