Django中的admin页面后台管理

使用后台管理Models

  • 1、创建超级用户
    • python manage.py createsuperuser
    • Username:
    • Email Address:
    • Password:
    • Password(again):
  • 2、基本后台管理
    • 在应用中的admin.py中注册要管理的数据
      • admin.py作用:注册需要管理的Models,只有在此注册过的Model才能被管理
      • 注册Models:admin.site.register(Entry)
      • 修改models.py处理显示内容,后台默认显示可读性不高,在models.py中的各个class中增加一个__str__函数(__str__函数)
      • 通过内部类Meta实现展现的属性,允许为每个models类设置展现形式(Meta类)
        • db_table : 指定该实体类对应到表的名称
        • verbose_name:定义该实体类在admin中显示的名称(复数形式)
        • verbose_name_plural:效果同上(单数形式)
        • ordering:在后台显示数据时的排序规则,取值是一个列表,默认为升序,降序则添加“-”号
  • 3、ImageField()
    • 注意:使用ImageField时,需要先pip install pillow
    • picture = models.ImageField(upload_to=‘static/upload/usring’),用户头像图片自动保存到项目主目录中的static/upload/usring中
    # admin.py
    from .models import *
    admin.site.register(Author)
    
    # models.py
    class Author(models.Model):
        name = models.CharField(max_length=30, verbose_name='姓名') # verbose_name为后台显示时的别名
        age = models.IntegerField(verbose_name='年龄')
        email = models.EmailField(null=True, verbose_name='邮箱')
        picture = models.ImageField(null=True, upload_to='static/upload/usring', verbose_name='用户头像')
    
        class Meta:
            db_table = 'author'   # index_author表名改成author,index为应用名
            verbose_name_plural = '作者'  # 在后台页面中Authors修改为作者
        	ordering = ['age', '-id']  # 数据记录按照age升序,且按照id降序排列显示
    
        def __str__(self):
            return self.name  # 后台管理页面中每个对象显示name值
    
  • 4、在页面中显示数据库的图片
    • 在settings.py 文件中配置staticurl
    • 页面顶部添加{% load static %}加载静态文件
    • < img src="/{{ author.picture }}">取出author的头像,注意src路径中要加斜杆“/”
      # settings.py 文件
      STATIC_URL = '/static/'
      STATICFILES_DIRS = (os.path.join(BASE_DIR,'static/').replace('\\','/'),)
      
      # views.py 文件
      def all_authors_views(request):
          authors = Author.objects.all()
          return render(request, 'all_authors.html', locals())
      
      	{% load static %}  <!-- 加载静态文件 -->
      	<!DOCTYPE html>
      	<html lang="en">
      	<head>
      	    <meta charset="UTF-8">
      	    <title>Title</title>
      	</head>
      	<body>
      	    {% for author in authors %}
      	        <p>姓名:{{ author.name }}</p>
      	        <p>年龄:{{ author.age }}</p>
      	        <p>邮箱:{{ author.email }}</p>
      	        <p>头像:<img src="/{{ author.picture }}" style="width: 100px"></p>
      	    {% endfor %}
      	</body>
      	</html>
      
  • 5、高级管理
    • 在admin.py中创建管理类,实现高级管理功能
      • 定义EntryAdmin类,继承自admin.ModelAdmin
      • 注册高级管理类
      • 允许在EntryAdmin增加的属性
        • 1、list_display
          • 作用:在显示实体信息的页面上,显示哪些字段
          • 取值:由属性名组成的列表或元组
          • ex:list_display = (‘name’, ‘age’, ‘email’)
        • 2、 list_display_links
          • 作用:定义能够链接到具体实体页面的链接
          • 取值:由属性名组成的列表或元组(取值必须要在出现在list_display中)
          • ex:list_display_links = (‘name’, ‘age’)
        • 3、 list_editable
          • 作用:定义在列表页面中运行被修改的字段
          • 取值:由属性名组成的列表或元组(取值必须要在出现在list_display中,但不能出现在list_display_links中)
          • ex:list_editable = (‘email’,)
        • 4、 search_fields
          • 作用:添加允许被搜索的字段
          • 取值:由属性名组成的列表或元组
          • ex:search_fields = (‘name’,‘email’)
        • 5、 list_filter
          • 作用:在列表的右侧增加过滤器,实现快速筛选
          • 取值:由属性名组成的列表或元组
          • ex:search_fields = (‘age’,)
        • 6、 date_hierarchy
          • 作用:在顶部增加一个时间选择器
          • 取值:必须是DateField 或者 DateTimeField类型的字段名
          • ex:date_hierarchy = ‘publication_date’
        • 7、 fields
          • 作用:在实体的详细页面中,显示哪些属性,并按照什么样的顺序显示
          • 取值:由属性名组成的列表或元组
          • ex:fileds = (‘name’, ‘age’, ‘email’)
        • 8、 fieldsets
          • 作用:在实体的详细页面中,对属性进行分组
          • 语法:fieldsets = ((‘分组名称’,{‘fields’:(属性1,属性2),‘classes’?‘collapse’,)}),)
          • ex:fieldsets = ((‘name’, ‘age’), (‘email’,))
          • 注意:fields 和 fieldsets 不能同时存在
class AuthorAdmin(admin.ModelAdmin): # 定义高级管理类
	# 在后台管理页面中每行显示name,age和email字段
    list_display = ('name', 'age', 'email') 
    
    # 在后台管理页面中每行中的name和age字段均可以点击进入该对象的管理页面 
    list_display_links = ('name', 'age')

	# 在后台管理页面中每行的email字段均可以在当前页面进行修改
	list_editable = ('email',)
	
	# 生成一个允许被搜索的字段,模糊搜索
    search_fields = ('name','email')

	# 生成一个过滤器
    list_filter = ('age',)

	# 在详细页面中只显示name,age和email字段,不显示用户头像
    fileds = ('name', 'age', 'email')

	# 对属性进行分组
    fieldsets = (
        ('基础属性',    # 分组名称
         {'fields':('name','age'),   # 分组字段
          'classes':('collapse',)   # 隐藏折叠效果
         }
        ),
        ('其他属性',
         {'fields': ('email', 'picture'),
          'classes': ('collapse',)
          }
         )
    )
    

class BookAdmin(admin.ModelAdmin):
	# 创建一个时间选择器
    date_hierarchy = 'publication_date'


admin.site.register(Author, AuthorAdmin) # 注册Models类和高级管理类
admin.site.register(Book, BookAdmin)
发布了75 篇原创文章 · 获赞 87 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43883022/article/details/101195605