• Django管理后台


    Django为我们创建并配置了默认的管理后台。我们只需要创建一个管理员(超级用户),就可以登录管理后台。

     python manage.py createsuperuser 

    创建超级用户后,启动Django项目,后台登录地址:http://127.0.0.1:8000/admin/

    注:管理后台是如何工作的呢?相当简单。启动服务器是,Django运行admin.autodiscover()函数。在早起的Django版本中,要在urls.py文件中调用这个函数,但是现实Django会自动运行它。这个函数迭代INSTALLED_APPS设置,在安装的各个应用中查找一个名为admin.py的文件。如果应用中存在这个文件,就执行里面的代码。在books应用的admin.py文件中,我们调用admin.site.register(),在管理后台中注册各个模型。只有注册的模型才能在管理后台中显示。django.contrib.auth应用也有admin.py文件,因此管理界面中才显示有“Users”和“Groups”。其他django.contrib应用,如django.contrib.redirects,也罢自己添加到管理后台中,从网上下载的很多第三方Django应用程序也会这么做。其实Django管理后台也是一个Django应用程序,有自己的模型、模版、视图和url模式。

    1、把模型添加到Django管理后台中

    from django.contrib import admin
    from .models import Publisher,Author,Book
    
    admin.site.register(Publisher)
    admin.site.register(Author)
    admin.site.register(Book)

    2、自定义修改列表

    • 在后台显示特定的字段
    from django.contrib import admin
    from .models import Publisher,Author,Book
    
    
    class AuthorAdmin(admin.ModelAdmin):
        list_display = ('first_name','last_name','email')
    
    admin.site.register(Publisher)
    admin.site.register(Author,AuthorAdmin)
    admin.site.register(Book)

    定义AuthorAdmin类。它是django.contrib.admin.Modeladmin的子类,存放指定模型在管理后台中的自定义配置。我们值做了一项定制,list_display,把它的值设为一个元组,指定要在修改列表页面显示的字段名称,当然模型中必须有这些字段。

    修改admin.site.register()调用,在Author后面添加AuthorAdmin。即把‘AuthorAdmin’选项注册Author模型。admin.site.register()函数的第二个参数可选,其值是一个ModelAdmin子类。如果不指定第二个参数,Django使用默认选项注册模型。

    添加一个简单的搜索框。在AuthorAdmin类中添加search_fields:

    class AuthorAdmin(admin.ModelAdmin):
        list_display = ('first_name','last_name','email')
        search_fields = ('first_name','last_name')

    为Book模型的修改列表页面添加几个日志过滤器:

    class BookAdmin(admin.ModelAdmin):
        list_display = ('title', 'publisher', 'publication_date')
        list_filter = ('publication_date',)
    
    
    admin.site.register(Book, BookAdmin)

    list_filter也能处理其他类型的字段,而非DateField一个。只要有超过两个值供选择,过滤器就会显示。提供日期过滤器的另一种方法是使用date_hierarchy选项:

    date_hierarchy = 'publication_date'。date_hierarchy的值是一个字符串,不是元组,因为只能使用一个日期字段创建层级导航。最后,修改默认的排序方式,让修改列表页面的如数时钟以出版日志倒序排序。
    class BookAdmin(admin.ModelAdmin):
        list_display = ('title', 'publisher', 'publication_date')
        list_filter = ('publication_date',)
        # date_hierarchy = 'publication_date'
        ordering = ('-publication_date',)

    ModelAdmin子类中的ordering选项与模型的class Meta中的ordering属性的作用完全一样,不过只使用列表中的第一个字段名称。ordering选项的值是一个字段名称列表或元组,如果想倒序,加上减号即可。

    自定义编辑表单:与修改列表一样,编辑表单的很放方面也可以定制。可以在ModelAdmin子类中使用fields选项修改排序:

    class BookAdmin(admin.ModelAdmin):
        list_display = ('title', 'publisher', 'publication_date')
        list_filter = ('publication_date',)
        # date_hierarchy = 'publication_date'
        ordering = ('-publication_date',)
        fields = ('title','authors','publisher','publication_date')

    添加fields之后,图书的编辑表单会使用指定的顺序显示各个字段。fie选项还有一个作用:排除特定的字段,禁止编辑。只需要去掉想要排除的字段即可。

    使用filter_horizontal替换fields,可以使过滤界面更简单。强烈建议使用filter_horizontal

    class BookAdmin(admin.ModelAdmin):
        list_display = ('title', 'publisher', 'publication_date')
        list_filter = ('publication_date',)
        # date_hierarchy = 'publication_date'
        ordering = ('-publication_date',)
        # fields = ('title','authors','publisher','publication_date')
        filter_horizontal = ('authors',)

    ModelAdmin子类也支持filter_vertical选项。它的作用与filter_horizontal完全一样,不过得到的JavaScript界面是纵向排列的两个选择框,而不是横向的。filter_horizontal和filter_vertical只能用于多对多字典,不能用于外键字段。

    随着书籍数据库不断变大,包含几千个出版社,添加图书表单要花一些时间才能加载,因为要加载每个出版社记录,在<select>菜单中显示。为加减这个问题,可以使用raw_id_fields选项:

    class BookAdmin(admin.ModelAdmin):
        list_display = ('title', 'publisher', 'publication_date')
        list_filter = ('publication_date',)
        # date_hierarchy = 'publication_date'
        ordering = ('-publication_date',)
        # fields = ('title','authors','publisher','publication_date')
        filter_horizontal = ('authors',)
        raw_id_fields = ('publisher',)

    raw_id_fields 这个选项的值是一个外键字段名称元组,各个字段在管理后台中显示为简单的文本输入框(<input type="text">)
    3、用户、分组和权限  
    你是以超级用户身份登录的,有权限创建、编辑和删除任何对象。当然,不同的环境需要不同的权限系统,不是每个人都可以或应该是超级用户。Django的管理后台也有权限系统,让你给特定用户赋予访问特定功能的权限。用户帐号应该是通用的,独立于管理界面,在外部仍可以使用,但是我们现在仍把他们当作管理员账户。
      • “Active”控制是否激活用户。如果未勾选,几遍用户使用有限的密码也无法登录;
      • “Staff status”控制是否允许用户登录管理界面(即是否把用户当作组织中的一员)。因为这个用户系统也用于控制面向公众的网站(即前台),所以这个旗标对公开公虎和管理员是有区别的;
      • “Superuser status”为用户赋予所有权限,可以在管理界面中添加、编辑和删除任何对象。如果勾选,用户的常规权限(即使没有)不再考虑。

     

  • 相关阅读:
    spring属性的三种注入方法
    spring整合web项目原理
    IOC与DI区别
    近期的一些思考(前后台对接方面)
    关于form表单回车自动刷新
    css画心形、三角形的总结
    网页播放器与播放器定制
    css实现div内凹角样式
    20190614笔记(颜色透明度,css,filter,滤镜,计算属性,json和formData转换)
    关于注册页面的总结
  • 原文地址:https://www.cnblogs.com/zhanlin/p/8337219.html
Copyright © 2020-2023  润新知