分享

Django(四)后台管理及Field参数

 看见就非常 2020-04-29

Django 提供了基于 web 的管理工具,自动管理工具是 django.contrib的一部分,django.contrib 是一套庞大的功能集,它是Django基本代码的组成部分。我们只要加少些代码,就可以实现强大的后台功能。与后台相关文件是每个app中的 admin.py 。下面就来学习一下Django的后台。

创建超级用户

后台管理都需要登录,登录的用户就是超级用户,这个用户拥有所有的权限,而且只能在本地项目里通过Django命令创建,也就是通过服务器是无法创建,保证了安全性,当然这个用户可以创建多个下属用户,并给这些用户授权。这个超级用户一般不要删除重新建。

在之前的基础上我们查看数据库(之前讲述过就不赘述),默认的auth_*表都是关于超级用户的关联表,由于还没有创建超级用户,所以只有auth_permission表有内容,里面包括了超级用户拥有的权限。其它的auth_*表都是空的。我们现在就创建超级用户,还是在项目的第一层demo下执行(输入用户名、邮箱、和密码,不要设置汉字):

python manage.py createsuperuser

这里写图片描述

然后可以查看数据库,在auth_user表里就可以看到建的超级用户了。

登录后台

创建好了后台的管理用户,我们还得把模型注册到后台里去,不然后台就只是一个空架子。还有就是后台登录的url必须配置。

  • 后台模型注册

    在login这个app模型中找到admin.py文件,admin.py文件是专门配置后台管理的文件,我们修改为如下(就是将我们在models.py里的两个数据表注册到后台让管理员能管理这两个表,在你新建了其它的表过后也在这里同样的注册):

from django.contrib import admin

# Register your models here.
from login.models import Members
from login.models import Types

admin.site.register(Members)
admin.site.register(Types)
  • 后台管理的登录url配置

我们通过哪个网址进入后台界面呢,还需要在第二层demo目录下的urls.py文件修改为如下:

from django.conf.urls import url
from django.contrib import admin
from login import views

urlpatterns = [
    url(r'^$', views.home),
    url(r'^login.html$', views.login),
    url(r'^admin/', admin.site.urls),
]

其中admin.site.urls是django的后台管理路由,这样我们就可以通过链接:http://127.0.0.1:8000/admin/ 来进入后台管理了。

  • 注意

先不着急启动项目,我们回过头看看login这个app下的models.py文件,在Members和Types这两个类里都有一个函数:

    def __str__(self):
        return self.name

上述是在python3中这样使用,在python2中你需要改成,不然会报错:

    def __unicode__(self):
        return self.name
  • 后台汉化

    汉化很简单,django支持多种语言,我们只需要在第二层的demo目录下将settings.py中的一个设置修改为如下:

LANGUAGE_CODE = 'zh-Hans'   # 修改后台的字体为汉字,en-us-->zh-Hans
  • 启动项目后台

    如果你的模型里的函数是“str”就用python3,如果是“unicode”就把下面的python3改为python再执行:

python3 manage.py runserver 8000

打开链接:http://127.0.0.1:8000/admin/ 就能看到登录界面(汉化),然后输入你创建的超级用户名和密码登录,进去界面如下:

这里写图片描述

看到有两个版块,一个是django默认的认证和授权版块,在这个版块下我们可以添加下属管理用户和用户组,并可以对这些下属管理用户授权。
然后就是login版块,这是我们的一个app模型,将它里面的Members和Types注册到后台就会在这里进行管理,当你新建了其它app模型的时候,只要在对应模型里的admin.py文件里注册就能在后台管理了。

  • 创建职员管理用户

我们点击用户右边的增加,建立一个user用户,如下图:

这里写图片描述

点击保存然后在弹出的页面设置权限,请将职员状态勾选上,这样你就可以通过这个用户登录到后台了:

这里写图片描述

然后我们把对members和types这两个数据表的权限赋给user用户:

这里写图片描述

然后我们注销当前admin超级管理员,然后用user用户登录界面如下:

这里写图片描述

Field参数

  • 使用示例

    切换到admin用户,点击Types右边的增加,出现如下图:

这里写图片描述

我们打开login这个app模型的models.py文件,在Types类是这样写的:

class Types(models.Model):
    name = models.CharField(max_length=20)
    types = models.IntegerField(default=4)

    def __str__(self):
        return self.name

这样你就得到上面那张图的结果,现在我们修改这个类为如下:

class Types(models.Model):
    TYPE_CHOICES = (
        (0, '超级管理员'),
        (1, '管理员'),
        (2, '导师'),
        (3, '成员'),
        (4, '游客')
    )
    name = models.CharField(max_length=20, verbose_name='名称')
    types = models.IntegerField(default=4, help_text='选择用户类型的编号', verbose_name='用户类型', choices=TYPE_CHOICES)

    def __str__(self):
        return self.name

然后我们保存,然后刷新刚才的页面会看到如下图:

这里写图片描述

首先我们得理解types是数据库中的一张表,其名字为login_types,然后name和types是这个表中的两列数据(两个字段),可以看到verbose_name就是这个字段在后台管理中显示的名称,没有设置就默认为该字段的名称,help_text就是在输入框下面显示的提示或帮助文字,choices是为这个输入框设置可选值(输入框改为下拉框)

  • 参数值

下面是Field的参数对应的效果,下面的参数是django所有的Field类型都有的,全部都是可选项:

字段 效果
null True/False 如果True,Django在数据库中将空值存储为NULL。默认是False。
blank True/False 如果True,该字段被允许为空白。默认是False。
choices 列表或元组 可选值列表,每个元组中的第一个元素是要在模型上设置的实际值,第二个元素是人类可读的显示出来的名称。
db_column 名称 用于此字段的数据库列的名称。如果没有给出,Django将使用该字段变量的名称。
db_index True/False 如果True,将为此字段创建一个数据库索引。
db_tablespace 名称 如果此字段已编入索引,则用于此字段索引的数据库表空间的名称。默认值是项目的 DEFAULT_INDEX_TABLESPACE设置(如果已设置)或 db_tablespace模型(如果有)。如果后端不支持索引的表空间,则忽略此选项。
default 字段的默认值。
editable True/False 如果False,该字段将不会显示在后台管理中,也就是管理员不可管理这个字段。默认是True。
error_messages 字典 当在后台管理中修改或添加时输入此字段时出现输入错误时显示的对应信息。错误消息键包括null,blank,invalid,invalid_choice,unique和unique_for_date。
help_text 字符串 额外的“帮助”文本与窗体小部件一起显示在后台的添加和修改界面中。如果你愿意,这可以让help_text包含HTML标签。
primary_key True/False 如果True这个字段是模型的主键。
unique True/False 如果True,这个字段在整个表中必须是唯一的。
unique_for_date True/False 如果True,这个字段在整个表中在每天是唯一的。
unique_for_month True/False 如果True,这个字段在整个表中在每个月中是唯一。
verbose_name 名称 该字段的人类可读名称。如果没有给出详细名称,Django将使用字段的属性名称自动创建它,将下划线转换为空格。
validators 字典 要为此字段运行的验证程序列表(验证输入合法性的程序列表)。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多