Django 提供了基于 web 的管理工具,自动管理工具是 django.contrib的一部分,django.contrib 是一套庞大的功能集,它是Django基本代码的组成部分。我们只要加少些代码,就可以实现强大的后台功能。与后台相关文件是每个app中的 admin.py 。下面就来学习一下Django的后台。
创建超级用户
后台管理都需要登录,登录的用户就是超级用户,这个用户拥有所有的权限,而且只能在本地项目里通过Django命令创建,也就是通过服务器是无法创建,保证了安全性,当然这个用户可以创建多个下属用户,并给这些用户授权。这个超级用户一般不要删除重新建。
在之前的基础上我们查看数据库(之前讲述过就不赘述),默认的auth_*表都是关于超级用户的关联表,由于还没有创建超级用户,所以只有auth_permission表有内容,里面包括了超级用户拥有的权限。其它的auth_*表都是空的。我们现在就创建超级用户,还是在项目的第一层demo下执行(输入用户名、邮箱、和密码,不要设置汉字):
python manage.py createsuperuser

然后可以查看数据库,在auth_user表里就可以看到建的超级用户了。
登录后台
创建好了后台的管理用户,我们还得把模型注册到后台里去,不然后台就只是一个空架子。还有就是后台登录的url必须配置。
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)
我们通过哪个网址进入后台界面呢,还需要在第二层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
LANGUAGE_CODE = 'zh-Hans' # 修改后台的字体为汉字,en-us-->zh-Hans
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参数

我们打开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 |
字典 |
要为此字段运行的验证程序列表(验证输入合法性的程序列表)。 |
|