Django后台管理

文章目录

    • Admin后台介绍
    • 添加模型到Admin管理后台
      • 字段设为可选
      • 自定义字段的标注
    • XAdmin介绍
      • 安装
      • 配置
      • 数据库同步
      • 页面上的显示效果
      • 项目上线admin样式加载失败

Admin后台介绍

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

python manage.py createsuperuser

打浏览器,访问本地域名上的 /admin/ 路径,就可以打开管理后台的登录界面。

使用创建的超级用户登录后就可以看到两种可编辑的内容:Groups(分组)和Users(用户),这是Django自带的身份验证框架django.contrib.auth。

在用户的页面内可以对用户属性进行修改,例如一些信息和权限,注意如果想要修改用户的密码,点击密码字段下的链接,不可以直接修改哈希密码。

添加模型到Admin管理后台

要把自己编写的模型添加到管理后台中,这样便可以在界面中添加、修改和删除自定义数据表中的对象。

在app01应用定义了三个模型:Publisher、Author和Book。startapp命令应该在books目录(mysite/books)中创建了admin.py文件,如果没有,自己动手创建。

修改 admin.py 文件:

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

上述代码告诉 Django 管理后台,为这几个模型提供界面。添加代码之后,在 Web 浏览器中访问管理后台首页(http://127.0.0.1:8000/admin/),会看到一个“Books”表,列出 Authors、Books 和 Publishers 链接。

字段设为可选

在管理后台中操作,编辑表单要求填写每个字段,而有时候某些字段需要是可选的。比如说,我们可能想让Author模型的email字段可选,即允许使用空字符串。

为了把email字段设为可选的,要编辑Author模型,为email字段添加blank=True参数。

classAuthor(models.Model):
    name = models.CharField(max_length=30)
    addr = models.CharField(max_length=40)
    email = models.EmailField(blank=True)

这个参数告诉 Django,作者的电子邮件地址允许为空值。默认情况下,所有字段都设定了blank=False,意即不允许为空值。

自定义字段的标注

在管理后台的编辑表单中,各个字段的标注根据模型中字段的名称生成。生成方式很简单:把下划线替换成空格,再把第一个字母变成大写。例如,Book模型中publication_date字段对应的标注是“Publication date”。

根据字段名称并不是总能生成好的标注,因此有时需要自定义。自定义标注的方式是为模型字段指定verbose_name参数。

classAuthor(models.Model):
    name = models.CharField(max_length=30,verbose_name='姓名')
    addr = models.CharField(max_length=40,verbose_name='住址')
    email = models.EmailField(blank=True,verbose_name='邮箱')
    # 修改列表显示的是各个对象的__str__()方法返回的结果
    def __str__(self):
        return self.name
    
    class Meta:
        verbose_name_plural = '作者表'
        # verbose_name = '用户表'  # 会在后面自动再加一个s后缀

在修改列表中添加几个其他字段。比如说,可以在列表中显示作者的电子邮件地址。为此,要为Author模型定义一个ModelAdmin子类。这个类是定制管理后台的关键,其中最基本的一件事是指定修改列表页面显示的字段。参照下述代码修改admin.py文件:

from django.contrib import admin
from mysite.books.models import Publisher,Author,Book 
class AuthorAdmin(admin.ModelAdmin):
	list_display= ('name','addr','email')
	
admin.site.register(Author,AuthorAdmin)

实现原理:

  • 定义AuthorAdmin类。它是django.contrib.admin.ModelAdmin的子类,存放指定模型在管理后台中的自定义配置。我们只做了一项定制,list_display,把它的值设为一个元组,指定要在修改列表页面显示的字段名称。当然,模型中必须有这些字段。
  • 修改admin.site.register()调用,在Author后面添加AuthorAdmin。你可以把这行代码理解为“以Au-thorAdmin中的选项注册Author模型”。admin.site.register()函数的第二个参数可选,其值是一个ModelAdmin子类。如果不指定第二个参数(Publisher和Book模型就是这样),Django 使用默认选项注册模型。

XAdmin介绍

前面讲到了django的admin后台管理系统,github上有一个更好看、功能更强大的库来管理后台,它的名字叫xadmin,

安装

1、通过命令直接安装:

pip install django-xadmin

2、通过源码进行安装:

源下载的目录下有一个requirements.txt文件,需要安装xadmin的依赖包

pip install -r requirements.txt

配置

将其注册到settings中的INSTALLED_APPS中

INSTALLED_APPS = [
   ...
    'xadmin',
    'crispy_forms',
]

配置url.py

import xadmin

urlpatterns = [
# url(r'^admin/', admin.site.urls),
url(r'^xadmin/', xadmin.site.urls),
]

创建adminx并配置adminx.py

# xadmin全局配置
import xadmin
from xadmin import views

class GlobalSettings(object):
    """xadmin的全局配置"""
    site_title = "xxx"  # 设置站点标题
    site_footer = "xxx"  # 设置站点的页脚
    menu_style = "accordion"  # 设置菜单折叠
xadmin.site.register(views.CommAdminView, GlobalSettings)
from . models import Publisher,Author,Book
# 注册
xadmin.site.register(Publisher)
xadmin.site.register(Author)

数据库同步

需要自己的数据库模型类,完成数据库迁移

python manage.py makemigrations 
python manage.py migrate

页面上的显示效果

修改app应用的名字

# app01/__init__.py
default_app_config = "home.apps.HomeConfig"

# app01/apps.py
from django.apps import AppConfig
class HomeConfig(AppConfig):
   name = 'home'
   verbose_name = '我的首页'

项目上线admin样式加载失败

djangouwsgi启动后,xadmin的配置文件会失效。

这是因为STATICFILES_DIRS=[]配置的静态文件只能在django自己启动时才生效。

解决方法如下:

# 1、在static同级目录下新建一个任意目录,这里叫files
mkdir files
# 2、在配置文件中配置一个STATIC_ROOT,就是刚刚新建的目录路径,这个就是url请求的地址:
STATIC_ROOT = '/项目路径/files'
# 3、执行命令将所有静态文件迁移到刚刚的files目录下
python3 manage.py collectstatic
# 4、在uwsgi的xml配置中,新增如下静态文件目录的路径
<static-map>/static=/home/sunhj/StreetDance/files</static-map> 
# 5、重启uwsgi
pkill -f uwsgi -9
uwsgi -x /启动uwsgi的配置文件/  # 后面就是xml路径
# 6、重启nginx
nginx -s reload

你可能感兴趣的:(Django)