什么是Admin?
Admin是Django自带的一个功能强大的自动化数据管理界面(后台管理系统)
被授权的用户可直接在Admin中管理数据库
Django提供了许多针对Admin的定制功能(强大)
配置Admin
创建用户
1.cmd进去项目中,执行python manage.py createsuperuser输入用户名,邮箱 ,密码等信息。这里需要提醒注意的是***密码不允许为12345678等等之类的简单的密码***,可以使用自己的名字的全拼,效果如下图:
2.成功之后,打开浏览器,地址栏中输入localhost:8000/admin,可以看到如下界面
输入用户名密码即可进入
3.此时,可以看到进入后的界面都是英文,如果想修改为中文,我们可以进入项目的settings.py中修改
LANGYAGE_CODE = ‘zh_Hans’
然后刷新页面就可以看到中文界面了。
配置应用
1.在应用下admin.py中引入自身的models模块(或里面的模型类)
2.编辑admin.py,代码如下:
from django.contrib import admin
from .models import Article
admin.site.register(Article) # 将模型类注册进来
在这里,需要特别强调一下,修改admin.py的时候,只是写from models import Article 会报错找不到models,所以需要改成.models或者blog.models才可以
修改数据
1.点击Article超链接进入Article列表页面(点击Blog–>Articles)如下图:
2.点击任意一条数据,进入编辑页面修改
3.编辑页面下方一排按钮可执行响应的操作
扩展
从图中可以看出,ARTICLE列表中显示的是Article Object,这个标题并不是我们数据库表中对应的数据,因此很不方便使用。
为什么会显示成Article Object?因为Article Article Object是类的一个实例对象,它是类实例的默认名称怎么修改Article Object为对应的数据?
在Article类下添加一个方法,根据Python版本选择:
如果使用的是Python3.X,则使用__str__(self)__
如果使用的是Python2.X,则使用 unicode(self)
之后return self.title.
models.py代码如下:
from __future__ import unicode_literals
from django.db import models
from django.db.models import Model
class Article(models.Model):
title = models.CharField(max_length=32, default='Title') # max_length为约束长度,default为默认值
content = models.TextField(null=True) # null=True为允许为空
def __str__(self):
return self.title
刷新页面,列表数据已成功修改。
Admin的扩展
如上图所示,在Admin中的Article列表中,我们只能看到一列标题的内容,可是如果我们想显示多列信息(其他字段)要如何操作呢 ?
实现步骤
创建admin配置类:
1.class ArticleAdmin(admin.ModelAdmin)
2.注册admin.site.register(Article, ArticleAdmin)
3.显示其他字段,使用list_dislplay,它同时支持tuple和list
admin.py代码如下:
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'content')
admin.site.register(Article, ArticleAdmin)
admin的过滤器的实现
1.自行在models.py中的Article类中添加pub_time字段,如下
pub_time = models.DateTimeField(null=True),然后执行python manage.py makemigrations和python manage.py migrate做数据迁移
2.使用list_filter,修改后的admin.py代码如下:
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'content', 'pub_time')
list_filter = ('pub_time', ) # 因为这里使用的是tuple,所有当括号里只有一个成员的时候也必须加上末尾的“,”
admin.site.register(Article, ArticleAdmin)