Django(part31)--admin后台数据库管理

学习笔记,仅供参考



admin后台数据库管理


django 提供了后台管理数据库的接口admin,我们可以在开发的测试阶段使用。django 会搜集所有已注册的模型类,为这些模型类提拱数据管理界面,供开发者使用。

在开发阶段,我们使用admin后台数据库管理界面进行调试将非常的方便。


使用步骤


  • 第一步:创建后台管理账号

创建管理员帐号,并根据提示完成注册:

F:\MyStudio\PythonStudio\goatbishop.project01\Django\mywebsite_db>python manage.py cr
eatesuperuser
Username (leave blank to use 'goatbishop'): darkgoat
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.

我们需要在Username处输入用户名,在Email address处输入邮箱,在Password处输入密码(密码要复杂些,否则会提示密码太简单),在**Password (again)**处再次输入相同的密码(Django为了防止我们第一遍时输入错误)


  • 第二步:开启服务器
python manage.py runserver

  • 用注册的帐号登陆后台管理界面

后台管理的登录地址:http://127.0.0.1:8000/admin


我们向http://127.0.0.1:8000/admin发起请求:

输入用户名和密码,点击Log in,得到如下页面:

我们点开Users:

我们看到,这里有一张表,表里有一条记录,这张表对应着我们mywebdb数据库中的auth_user数据表:

mysql> select id,username,email from auth_user;
+----+----------+----------------------+
| id | username | email                |
+----+----------+----------------------+
|  1 | darkgoat | [email protected] |
+----+----------+----------------------+
1 row in set (0.00 sec)

我们点开darkgoat,填入姓和名:


点击保存,并查看auth_user数据表:

mysql> select username, first_name, last_name from auth_user;
+----------+------------+-----------+
| username | first_name | last_name |
+----------+------------+-----------+
| darkgoat | 扬         | 桂        |
+----------+------------+-----------+
1 row in set (0.00 sec)

更改成功!


自定义后台管理数据表

若想要自己定义的模型类也能在 /admin 后台管理界中显示和管理,需要将自己的类注册到后台管理界面,添加自己定义模型类的后台管理数据表的,需要用admin.site.register(自定义模型类) 方法进行注册


配置步骤

  • 在应用app中的admin.py中导入注册要管理的模型models类

我们打开bookstore应用的admin.py,导入模型类:

from . import models

  • 调用 admin.site.register 方法进行注册
from django.contrib import admin
admin.site.register(models.Book)
#admin.site.register(自定义模型类)

现在,我们回到http://127.0.0.1:8000/admin/后台管理界面:

界面中多了一个Books,我们点进去看看:

我们看到5本书,这些记录都是我们之前手动添加到数据库的。

现在,我们点进去第一个记录:

这个界面是Django通过我们的模型类,自动帮我们生成的。在这个界面中,我们可以对记录进行修改或删除。

现在,我们对这条记录做出如下修改,并点击保存:

回到http://127.0.0.1:8000/admin/bookstore/book/:


我们再对Author进行注册,并刷新admin数据库管理界面:

再点击Authors:

我们发现,这里是一堆Author object(#),而不像Books界面中显示的那么直观,利于我们进行后续的判断,这是因为我们在Book模型类中对__str__方法进行了重写,现在,我们也对Author模型类的__str__方法进行重写。

models.py

class Author(models.Model):
    name = models.CharField("姓名", max_length = 30, null = False, 
                            unique = True, db_index = True)
    age = models.IntegerField("年龄, ", null = False,
                           default = 1)
    email = models.EmailField("邮箱", null = True)
    def __str__(self):
        string = "姓名:{}, 年龄:{}".format(self.name, self.age) 
        return string

记得更改过models.py文件后要进行迁移操作。


我们再刷新一下界面:

very well


模型管理器类


模型管理器类可以用后台管理界面添加新功能。后台管理器类须继承自 django.contrib.admin 里的 ModelAdmin


模型管理器的使用方法


  • <应用app>/admin.py 里定义模型管理器类
class XXXX_Manager(admin.ModelAdmin):
    ......

  • <应用app>/admin.py 里注册管理器类与模型类关联
from django.contrib import admin
from . import models
admin.site.register(models.YYYY, XXXX_Manager)
#注册管理器类与模型类关联
#models.YYYY是模型类
#管XXXX_Manager是管理器类

ModelAdmin模型管理器类中的高级管理功能


类成员 功能
list_display 控制哪些字段会显示在Admin的修改列表页面中
list_display_links 控制list_display中的字段是否应该链接到对象的“更改”页面
list_filter 设置激活Admin修改列表页面右侧栏中的过滤器
search_fields 设置启用Admin更改列表页面上的搜索框
list_editable 设置在更改列表页面上对某字段直接进行编辑修改

其它参见https://docs.djangoproject.com/en/1.11/ref/contrib/admin/


  • 举个例子

我们将Book管理器类与Book模型类关联起来,并在更改列表页面中添加一些高级功能。


bookstore应用下的admin.py文件:

from django.contrib import admin
from . import models
# Register your models here.

class Book_Manager(admin.ModelAdmin):
    list_display = ['title', 'pub','exfacPrice', 'price']
    list_filter = ['pub']

admin.site.register(models.Author)
admin.site.register(models.Book, Book_Manager)

向Book更改列表页面http://127.0.0.1:8000/admin/bookstore/book/发起请求:


数据库表管理


修改模型类字段的显示名字


在模型类中,各字段的第一个参数为verbose_name,此字段的值会在后台数据库管理页面显示,比如我们的Book模型类是这样定义的:

class Book(models.Model):
    title = models.CharField("书名", max_length = 30)
    pub = models.CharField("出版社名", max_length = 50,null = True)
    exfacPrice = models.DecimalField("出厂价", 
                                   max_digits = 6, decimal_places = 2,
                                   default = 0)
    
    price = models.DecimalField("售价", 
                              max_digits = 6, decimal_places = 2,
                              default = 0)
    
    def __str__(self):
        string = "书名:%s, 出版社:%s" % (self.title, self.pub) 
        return string

我们查看一下后台数据库管理页面:


通过Meta内嵌类定义模型类的属性及展现形式


在模型类中,可以通过定义内部类class Meta的方式,来重新定义当前模型类和数据表的一些属性信息。


  • 用法
class Book(models.Model):
    title = CharField(....)
    class Meta:
        1. db_table = '数据表名'
            - 该模型所用的数据表的名称。(设置完成后需要立马更新同步数据库)
        2. verbose_name = '单数名'
            - 该模型对象的一个易于理解的名称(单数),用于显示在/admin管理界面中
        3. verbose_name_plural = '复数名'
            - 该对象复数形式的名称(复数),用于显示在/admin管理界面中

  • 举个例子

我们在models.py中新增一个Publisher模型类,并定义Meta内部类:

class Publisher(models.Model):
    pub = models.CharField("出版社名", max_length = 50,null = True)
    booknumber = models.PositiveIntegerField("初版书籍总量", default = 0)
    tele = models.CharField("联系电话", max_length = 11, null = False)
    class Meta:
        db_table = "china_publisher"
        verbose_name = "ChinaPublisher"
        verbose_name_plural  = "ChinaPublishers"

在Django shell中给china_publisher数据表添加一些数据:

In [2]: from bookstore import models

In [3]: models.Publisher.objects.create(pub="人民邮电出版社", tele="81055364")
Out[3]: <Publisher: Publisher object (1)>

In [4]: models.Publisher.objects.create(pub="清华大学出版社", tele="62783933")
Out[4]: <Publisher: Publisher object (2)>

In [5]: models.Publisher.objects.create(pub="机械工业出版社", tele="88379833")
Out[5]: <Publisher: Publisher object (3)>

In [6]: models.Publisher.objects.create(pub="电子工业出版社", tele="88258888")
Out[6]: <Publisher: Publisher object (4)>

打开admin数据库管理界面:

点开ChinaPublishers:

查看mywebdb数据库中的数据表们:

mysql> show tables;
+----------------------------+
| Tables_in_mywebdb          |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| bookstore_author           |
| bookstore_book             |
| china_publisher            |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
13 rows in set (0.00 sec)

可以看到,Publisher模型类创建的数据表名字为china_publisher。

猜你喜欢

转载自blog.csdn.net/m0_37422217/article/details/106891886
今日推荐