Admin站点

Admin站点

使用Django的管理模块,需要按照如下步骤操作:

1.管理界面本地化(可有可无)

2.创建管理员

3.注册模型类

4.自定义管理页面

一、管理界面本地化

在settings.py中设置语言和时区

LANGUAGE_CODE = 'zh-hans' # 使用中国语言
TIME_ZONE = 'Asia/Shanghai' # 使用中国上海时间
二、创建超级管理员

创建管理员的命令如下,按提示输入用户名、邮箱、密码。

python manage.py createsuperuser

如果想要日后修改密码可以输入如下命令:

python manage.py changepassword 用户名

开启服务器,输入如下网站

http://127.0.0.1:8000/admin/

然后输入前面创建的用户名、密码完成登录。

在这里插入图片描述
登录成功后界面如下,但是发现并没有我们自己模型的入口,接下来我们开始第三步操作

[外链图片转存失败(img-Z3mS1B96-1567427877537)(file:///C:/Users/%E6%B8%85%E9%A3%8E/Desktop/%E5%B0%B1%E4%B8%9A%E7%AC%AC%E4%BA%8C%E9%98%B6%E6%AE%B5%E8%AF%BE%E4%BB%B6/images/admin_index.png)]

三、APP应用配置

在每个应用目录中都包含了apps.py文件,用于保存该应用的相关信息。

在创建应用的时候,Django会向apps.py文件中写入一个该应用的配置类。如:

from django.apps import AppConfig

class BooktestConfig(AppConfig):
    name = "booktest"

我们将此类添加到工程settings.py文件中的INSTALLED_APPS列表中,表明注册安装局具备此配置属性的应用。

  • AppConfig.name属性表示这个配置类是加载到哪个应用的,每个配置类必须包含此属性,它也是默认自动生成的。
  • AppConfig.verbose_name属性用于设置该应用的值观可读的名字,此名字会在Django提供的Admin管理站点中显示,如:
from django.apps import AppConfig

class BooktestConfig(AppConfig):
    name = 'booktest'
    verbose_name = '图书管理'
四、注册模型类

登录后台管理后,默认没有我们创建的子应用中的定义的模型类,需要在自己应用中的admin.py文件中注册,才可以在后台管理中看到,并且可以进行增删改查等操作。

打开booktest/admin.py文件,编写如下代码:

from django.contrib import admin
from booktest.models import BookInfo, HeroInfo

admin.site.register(BookInfo)
admin.site.register(HeroInfo)

到浏览器中刷新页面,可以看到模型类BookInfo和HeroInfo的管理了。

在这里插入图片描述

点击类名称”BookInfo"(图书类)可以进入列表页面,默认的话只有一列。

在这里插入图片描述
在列表页面中点击“增加”可以进入增加页面,Django会根据模型类的不同,生成不同的表单控件,按提示填写表单内容后点击“保存”,完成数据创建,创建成功后返回列表页面。
在这里插入图片描述

在列表页中点击某行的第一列可以进入修改页。

[外链图片转存失败(img-jM7U2IN0-1567427877555)(file:///C:/Users/%E6%B8%85%E9%A3%8E/Desktop/%E5%B0%B1%E4%B8%9A%E7%AC%AC%E4%BA%8C%E9%98%B6%E6%AE%B5%E8%AF%BE%E4%BB%B6/images/admin_update_enter.png)]

按照提示进行内容的修改,修改成功后进入列表页。在修改页点击“删除”可以删除一项。

[外链图片转存失败(img-zJZ25kWU-1567427877558)(file:///C:/Users/%E6%B8%85%E9%A3%8E/Desktop/%E5%B0%B1%E4%B8%9A%E7%AC%AC%E4%BA%8C%E9%98%B6%E6%AE%B5%E8%AF%BE%E4%BB%B6/images/admin_update.png)]

删除:在列表页勾选想要删除的复选框,可以删除多项。

在这里插入图片描述

点击执行后进入确认页面,删除后回来列表页面。

[外链图片转存失败(img-vQDsfLmY-1567427877562)(file:///C:/Users/%E6%B8%85%E9%A3%8E/Desktop/%E5%B0%B1%E4%B8%9A%E7%AC%AC%E4%BA%8C%E9%98%B6%E6%AE%B5%E8%AF%BE%E4%BB%B6/images/admin_delete_check.png)]

五、调整站点信息

Admin站点的名称信息也是可以自定义的。

未调整之前的界面是如下图的:

[外链图片转存失败(img-8UN3dyCr-1567427877564)(file:///C:/Users/%E6%B8%85%E9%A3%8E/Desktop/%E5%B0%B1%E4%B8%9A%E7%AC%AC%E4%BA%8C%E9%98%B6%E6%AE%B5%E8%AF%BE%E4%BB%B6/images/origin_site.png)]

  • admin.site.site_header 设置网站页头
  • admin.site.site_title 设置页面标题
  • admin.site.index_title 设置首页标语

在booktest/admin.py文件中添加如下信息

from django.contrib import admin

admin.site.site_header = "网页的页头"
admin.site.site_title = "首页的标题"
admin.site.index_title = "首页的标语"

六、修改列表页的展示

修改列表页和编辑页必须先定义和使用Admin管理类

Django提供的Admin管理站点的展示效果可以通过自定义ModelAdmin类来进行控制。

定义管理类需要继承自admin.ModelAdmin类:

from django.contrib import admin

class BookInfoAdmin(admin.ModelAdmin):
    pass

使用管理类有两种方式:

  • 注册参数

    admin.site.register(BookInfo, BookInfoAdmin)
    
  • 装饰器

    @admin.register(BookInfo)
    class BookInfoAdmin(admin.ModelAdmin):
        pass
    

1.列表中的列显示哪些字段

list_display = [字段1,字段2,...]

1)打开booktest/admin.py文件,修改BookInfoAdmin类如下:

class BookInfoAdmin(admin.ModelAdmin):
    ...
    list_display = ['id','btitle','bpub_date']

2.每页显示多少数据

默认每页显示100条数据,现在将每页显示更改为3条数据。

class BookInfoAdmin(admin.ModelAdmin):
    ...
	list_per_page = 3

3."操作选项的位置"

顶部显示的属性,设置为True则显示在顶部,设置为False则不显示,默认为True

actions_on_top = True

底部显示的属性,设置为True则显示在底部,设置为False则不显示,默认为False

actions_on_bottom = True

4.右侧栏中的过滤器

属性如下,只能接收字段,会将对应字段的值列出来,用于快速过滤。一般都是用于有重复值多的字段,比如性别。

list_filter = ['gender']

5.搜索框

属性如下,用于对指定字段的值进行搜索,支持模糊查询。列表类型,表示在列表中的这些字段上进行搜索查询。

search_fields = ['btitle','comment']

6.将方法作为列

列可以是模型字段,还可以是模型的方法,要求方法有返回值

通过设置short_description属性,可以设置在admin网页站点中显示列的名称

1)打开booktest/models.py文件,修改BookInfo类如下:

class BookInfo(models.Model):
    def pub_date_new(self):
        return self.bpub_date.strftime("%Y年%月%日")
    
    # 设置方法字段在admin中显示标题
    bpub_date_new.short_description = "发布的日期" 
    

2)打开booktest/admin.py文件,修改BookInfoAdmin类如下:

class BookInfoAdmin(admin.ModelAdmin):
    list_display = ['id','btitle','pub_date_new']

3)刷新查看结果

注:默认方法列是不能排序的,如果需要排序需要为方法指定排序依据。

admin_order_field = 字段

重新打开booktest/models.py文件,修改BookInfo类如下:

class BookInfo(models.Model):
    def pub_date_new(self):
        return self.bpub_date.strftime("%Y年%m月%日")
    
    pub_date_new.short_description = "发布的日期"
    pub_date_new.admin_order_field = 'bpub_date'    #这里一定要写对应之前的那个字段名字
七、关联对象

无法直接关联对象的属性或者方法,但是可以在模型类中封装方法,访问关联对象的成员。

1)打开booktest/models.py文件,修改HeroInfo类如下:

class HeroInfo(models.Model):
    
    def read(self):
        return read.hbook.bread
    
    read.short_description = "图书阅读量"

2)打开booktest/admin.py文件,修改HeroInfoAdmin类如下:

class HerInfoAdmin(admin.ModelAdmin):
    
    list_display = ['id','hname','hbook','read']

3)刷新测试结果

八、修改编辑页面的展示

1.显示字段

属性如下:

fields = []

1)点击某行链接,可以转到修改页面,默认效果如下图:
[外链图片转存失败(img-hLR0mcMG-1567427877566)(file:///C:/Users/%E6%B8%85%E9%A3%8E/Desktop/%E5%B0%B1%E4%B8%9A%E7%AC%AC%E4%BA%8C%E9%98%B6%E6%AE%B5%E8%AF%BE%E4%BB%B6/images/edit_default.png)]

2)打开booktest/admin.py文件,修改BookInfoAdmin类如下:

class BookInfoAdmin(admin.ModelAdmin):
    
    fields = ['btitle','bpub_date']
    

3)刷新效果如下:

[外链图片转存失败(img-80rmuiVB-1567427877569)(file:///C:/Users/%E6%B8%85%E9%A3%8E/Desktop/%E5%B0%B1%E4%B8%9A%E7%AC%AC%E4%BA%8C%E9%98%B6%E6%AE%B5%E8%AF%BE%E4%BB%B6/images/edit_result.png)]

2.分组显示

属性:

fieldsets = (
	('组1标题',{'fields':('字段1','字段2')}),
    ('组2标题',{'fields':('字段3','字段4')}),

)

1)打开booktest/admin.py文件,修改BookInfoAdmin类如下:

class BookInfoAdmin(admin.ModelAdmin):
    
     fieldsets = (
        ('基本', {'fields': ['btitle', 'bpub_date']}),
        ('高级', {
            'fields': ['bread', 'bcomment'],
             # 是否折叠显示
            'classes': ('collapse',) 
        })
    )

2)刷新查看结果如下:

[外链图片转存失败(img-vwcn2Cl7-1567427877570)(file:///C:/Users/%E6%B8%85%E9%A3%8E/Desktop/%E5%B0%B1%E4%B8%9A%E7%AC%AC%E4%BA%8C%E9%98%B6%E6%AE%B5%E8%AF%BE%E4%BB%B6/images/display_group.png)]

3.关联对象

在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格和块两种

  • 类型InlineModelAdmin : 表示在模型的编辑页面嵌入关系模型的编辑
  • 子类TabularInline :以表格的形式嵌入
  • 子类StackedInline :以块的形式嵌入

1)打开booktest/admin.py文件,创建HeroInfoStackInline类

class HeroInfoStackInline(admin.StackeInline):
    model = HeroInfo # 要便阿吉的对象
    extra = 1 # 附加编辑的条数
    

2)打开booktest/admin.py文件,修改BookInfoAdmin类如下:

class BookInfoAdmin(admin.ModelAdmin):

​ inlines = [HerInfoStackInline]

3)刷新结果效果如下:

在这里插入图片描述

可以使用表格的形式嵌入:

1)打开booktest/admin.py文件,创建HeroInfoTabularInline类

class HeroInfoTabularInline(admin.TabularInline):
    model = HeroInfo
    extra = 1

2)打开booktest/admin.py文件,修改BookInfoAdmin类如下:

class BookInfoAdmin(admin.ModelAdmin):
    inlines = [HeroInfoTabularInline]

3)刷新结果如下:
[外链图片转存失败(img-AqdUxRPJ-1567427877572)(file:///C:/Users/%E6%B8%85%E9%A3%8E/Desktop/%E5%B0%B1%E4%B8%9A%E7%AC%AC%E4%BA%8C%E9%98%B6%E6%AE%B5%E8%AF%BE%E4%BB%B6/images/relate_table.png)]

九、上传图片

Django有提供文件系统支持,在Admin站点中可以轻松上传图片。

使用Admin站点保存图片,需要安装Python的图片操作包

pip install Pillow

1.配置

默认情况下,Django会将上传的图片保存在本地服务器上,需要配置保存的路径。

我们可以将上传的文件保存在静态文件目录下,如我们之前设置的starc_img目录下

在settings.py文件中添加如下,上传保存目录的信息

MEDIA_ROOT = os.path.join(BASE_DIR,'static_img/Media')
# 这个Media是自己创建的目录,用于保存上传的文件

2.给模型类添加ImageFiled字段

打开bootest/models.py文件,为以前的BookInfo类添加一个图片字段

class BookInfo(models.Model):
    
    image = models.ImageFiled(upload_to = 'booktest',null = True,varbose_name = '图片')
# 设置null是因为以前的字段中没有图片,所以默认设置为空
# upload_to 选项指明该字段的图片保存在MEDIA_ROOT目录中的哪个子目录

因为修改了模型类的字段,所以需要数据库迁移

python manage.py makemigrations
python manage.py migrate

3.使用Admin站点上传图片

进入Admin站点的图书管理页面,选择一个图书,然后会发现多出来一个图片字段。
在这里插入图片描述
点击选择文件,然后选择一张图片

然后文件会被保存在static_img/media/booktest目录下。

在数据库中我们也能给看到imgae字段的图片路径。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值