Django 为我们创建并配置了默认的管理后台。我们只需创建一个管理员用户(超级用户),就可以登录管理后台。执行下述命令,创建一个管理员用户:
python manage.py createsuperuser
打浏览器,访问本地域名上的 /admin/ 路径,就可以打开管理后台的登录界面。
使用创建的超级用户登录后就可以看到两种可编辑的内容:Groups(分组)和Users(用户),这是Django自带的身份验证框架django.contrib.auth。
在用户的页面内可以对用户属性进行修改,例如一些信息和权限,注意如果想要修改用户的密码,点击密码字段下的链接,不可以直接修改哈希密码。
要把自己编写的模型添加到管理后台中,这样便可以在界面中添加、修改和删除自定义数据表中的对象。
在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)
实现原理:
前面讲到了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 = '我的首页'
django
用uwsgi
启动后,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