Django Admin

注明

本笔记主要参考《Django应用开发实战》《Django企业开发实战》,这两本书前者详细,后者精炼。学习之后真的是感觉自己进步了很多。值得一读,如果你遇到了值得一读的书籍,欢迎推荐给我,大家共同进步



前言

Admin后台系统也称为网站后台管理系统,主要对网站的信息进行管理。它是对网站数据库和文件进行快速操作和管理的系统,以使网页内容能够及时得到更新


一、初识Admin

Django的后台系统是默认开启的,若不需要admin后台系统可以在settings中注释配置(关闭admin可以减少程序对系统资源的占用。)

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'index.apps.IndexConfig',
    'user.apps.UserConfig',#user
    'article.apps.ArticleConfig',
    'classroom'
]

其中django.contrib.admin就代表admin后台系统。

进入admin系统

urlpatterns = [
    path('admin/', admin.site.urls),]

创建超级用户来登录admin

在项目根目录输入命令

python manage.py createsuperuser

注:如果你已修改auth系统自带的user,每个字段一定要设置默认值或可以为空。否则无法通过上面命令创建超级用户。

将后台内容以中文显示

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    #使用中文
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

注:一定要注意顺序。中间件MIDDLEWARE 的写法将会在后文详细介绍。

admin网页布局

在这里插入图片描述
介绍:

  • 站点管理:整个admin后台的主体页面,整个项目的App所定义的模型都会在此页面显示。
  • 认证授权:Django内置的用户认证系统,包括用户信息、权限管理和用户组设置等功能。
  • 用户和组:是认证和授权所定义的模型,分别对应auth_user和auth_user_groups. [我这里没有用户,是因为我修改了auth的user]

将自定义模型展示在admin页面中(即注册)

注册方法一:
	admin.site.register(model,[继承ModelAdmin 的类])
	参数解释:
			model:所需要在admin页面展示的model名称。
			ModelAdmin:用于设置模型如何展示在Admin后台系统里,具体写法后文将会介绍。
注册方法二:装饰器
	使用装饰器admin.register(model)装饰继承ModelAdmin的类。

示例:

class MyUserAdmin(admin.ModelAdmin):
    pass
@admin.register(ClassRoom)
class ClassRoom(admin.ModelAdmin):
    pass
admin.site.register(MyUser,MyUserAdmin)

Modeladmin常用属性(字段)

fields:在变更模型时,设置的可编辑字段。格式为列表,默认为除exclude包含的字段
exclude:隐藏字段,使得字段不可编辑。
fieldsets:改变新增和修改页面的网页布局,不能与fields、exclude共用。其格式如下:所示
class ClassRoom(admin.ModelAdmin):
fieldsets = (
        ('班级介绍',{
   'fields':('name','max_student','introduce')}),
        ('已有人员',{
   
            #显示字段
            'fields':('student_number',),
            #隐藏字段
            'classes':('create')
        })
    )

补充:字典中还可以用’description’添加’描述’,
注:

ClassRoom(models.Model):
   name=models.CharField(max_length=200,verbose_name='班级名称')
   max_student=models.PositiveIntegerField('班级容纳最大人数')
   create=models.DateField(auto_now_add=True,verbose_name='创建时间')
   student_number=models.SmallIntegerField('班级现有人数',default=0)
   introduce=models.TextField('简要介绍',default='这个班级很神秘,没有什么简介')

结果:

在这里插入图片描述

	radio_fields:将字段(外键字段或有choices参数)的下拉框展示,改为单选按钮。格式{
   字段:value},value可选admin.HORIZONTAL水平排列,admin.VERTICAL。
	readonly_fields:可读,但不可编辑字段列表形式。
	ordering:以某些字段排序,格式为列表,元素添加-为降序。
	sorted_by:设置数据列表页设置的每列数据是否可排序显示。列表形式
sortable_by = ['name','create']
	list_display:格式为列表或元组,在数据列表页设置显示在页面的模型字段。
list_display = ['name','max_student','student_number','create']

结果
在这里插入图片描述

	list_display_link:为模型字段设置路由,由该路由地址进入修改页面。
	list_filter:格式为列表或元组,在数据列表页的右侧添加过滤器,用于筛选和查找数据。
list_filter = ['name','max_student']

结果
在这里插入图片描述
补充:自定义list_filiter一般通过继承admin的SimpleListFilter类,并重写两个属性(title标题、parameter_name查询URL的参数名,如查询分类id为1的内容,URL后面的Query部分是?parameter_name=1)和两个方法(lookups返回所需要查询的数据,queryset根据URL Query的内容返回列表页数据)

class CategoryOwnerFilter(admin.SimpleListFilter):
    title = '分类过滤器'
    parameter_name = 'owner_category'
    def lookups(self, request, model_admin):
        return Category.objects.filter(owner=request.user).values_list('id',
                                                                      'name')
    def queryset(self, request, queryset):
        category_id=self.value()#如果?parameter_name=1那么self.value就是1
        if category_id:
            return queryset.filter(category_id=category_id)
        return queryset

重写完之后,直接添加到list_filiter中。

list_filter = [CategoryOwnerFilter]
list_per_page:数据列表页每页的数据量
search_fields:设置搜索字段,说明:对于关联字段(外键)需要__
search_fields = ['title','category__name']
#------------models
category=models.ForeignKey(Category,verbose_name='分类',on_delete=models.CASCADE)
class Category(models.Model):
	name=models.CharField(max_length=50,verbose_name='名称')

补充:__这种用法还可以作用于list_display和list_filter

save_as是否添加另存为的功能按钮
actions_on_bottom、actions_on_top:布尔值,设置动作栏的位置。

Modeladmin的方法(admin的二次开发)

通过上面的学习我们已经可以配置出完善的admin了,但还有很多问题没有解决:如页面展示不够友好,最好的解决方法,就是把自己当成用户去体验流程,在体验流程时,一定要将自己当作一般人,我们做出来的东西别人看到的永远是界面,而不是代码,这里不能简简单单的用代码足够优雅,框架合理就可以解决,更应该做出优雅对一般人友好的产品。下面将进一步进行定制admin。介绍Modelsadmin的方法,并实施重写,以达到二次开发的目的。

get_only_fields()函数

它获取readonly_fields的属性值,从而将模型字段设为只读,通过重写此方法可以自定义模型字段的只读属性,比如根据不同的用户角色来设置模型字段的只读属性。

@admin.register(ClassRoom)
class ClassRoom(admin.ModelAdmin):
    fieldsets = (
        ('班级介绍',{
   'fields':('name','max_student','introduce')}),
        ('已有人员',{
   
            #显示字段
            'fields':('student_number',),
            #隐藏字段
            'classes':('create')
        })
    )
    ordering = ['-max_student']
    sortable_by = ['name','create']
    list_display = ['name','max_student','student_number','create']
    list_display_link=['max_student']
    list_filter = ['name','max_student']
    list_per_page = 20
    save_as = True
    actions_on_bottom = True
    actions_on_top = False
    def get_readonly_fields(self, request, obj=None):
        if request.user.profession=='superuser':
            self.readonly_fields=[]
        elif request.user.profession=='teacher':
            self.readonly_fields=['student_number']
        else:
            self.readonly_fields=[
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django AdminDjango 框架中的一个强大的管理界面,可以用于管理网站的后台数据。使用 Django Admin 登录,需要按照以下步骤进行操作: 1. 启动 Django 项目,确保你已经创建了项目,并且在项目的 settings.py 文件中配置了数据库连接信息。 2. 在项目的 urls.py 文件中,引入 Django Admin 的路由配置。通常情况下,Django Admin 的路由配置已经在默认的 urls.py 文件中设置好,你只需要将这些配置引入即可。 ```python from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), # 其他路由配置 ] ``` 3. 在项目的终端中运行 `python manage.py runserver` 命令,启动开发服务器。 4. 在浏览器中访问 `http://localhost:8000/admin/`,会进入 Django Admin 的登录页面。 5. 在登录页面中,输入你在 Django 项目中创建的超级用户的用户名和密码,点击登录按钮。 6. 如果用户名和密码正确,会跳转到 Django Admin 的管理界面,你可以在这里管理和操作你的后台数据。 请注意,登录 Django Admin 需要一个超级用户账号,这个账号可以在项目启动后通过命令 `python manage.py createsuperuser` 来创建。创建超级用户时,需要输入用户名、电子邮件和密码等信息。 总结起来,要登录 Django Admin,你需要创建一个超级用户,并在登录页面中输入正确的用户名和密码,然后你就可以通过 Django Admin 来管理和操作你的后台数据了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值