前面已经写了如何做接口,那是方便调用的。现在写个如何做后台系统,是方便操作的。
Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据。后台管理可以在各个app的admin.py文件中进行控制。
假如有个小白,想做个后台系统,如何做,他可以直接用Django的admin来弄。 先安装django,创建项目和app
pip install django
django-admin startproject xxx
cd xxx
python manage.py startapp yyy
项目和app建好后,到项目的settings.py里面,把新增的app加上
INSTALLED_APPS = [
...
'bb',
'rest_framework'
]
安装好mysql后,
mysql -u root -p
show databases;
为Django项目创建数据库
create database rouboinfo default charset utf8 collate utf8_general_ci;
在项目的settings.py中,将默认的改成:
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'rouboinfo',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
'PORT': '3306',
}
初始化数据库
python manage.py makemigrations
python manage.py migrate
我们根据自己的需求,定义的表
在app中的models中定义好字段。
from django.db import models
# Create your models here.
class employeelist(models.Model):
id = models.CharField('编号', primary_key=True,max_length=100)
name = models.CharField('姓名', max_length=100)
sex = models.CharField(verbose_name='性别', max_length=5, choices=(('male', '男'), ('female', '女')), default='male')
car_id = models.CharField('身份证号', max_length=100)
province = models.CharField('籍贯', max_length=50)
department = models.CharField('部门', max_length=50)
position = models.CharField('职位', max_length=50)
employee_in_time = models.DateTimeField('入职时间',max_length=100)
leader_name = models.CharField('直属领导', max_length=50)
class Meta:
verbose_name_plural = verbose_name = "员工信息" # 该模型在后台显示的名称
def __str__(self):
return self.name
其中字段类型可以参考:
1、AutoField ---自增列 = int(11) 如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
2、CharField ---字符串字段 单行输入,用于较短的字符串,如要保存大量文本, 使用 TextField。必须 max_length 参数,django会根据这个参数在数据库层和校验层限制该字段所允许的最大字符数。
3、BooleanField ---布尔类型=tinyint(1) 不能为空,Blank=True
4、ComaSeparatedIntegerField ---用逗号分割的数字=varchar 继承CharField,所以必须 max_lenght 参数,
5、DateField ---日期类型 date 对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
6、DateTimeField ---日期类型 datetime 同DateField的参数
7、Decimal ---十进制小数类型 = decimal 必须指定整数位max_digits和小数位decimal_places
8、EmailField ---字符串类型(正则表达式邮箱) =varchar 对字符串进行正则表达式 一个带有检查 Email 合法性的 CharField,不接受 maxlength 参数。
9、FloatField ---浮点类型 = double 浮点型字段。必须提供两个 参数, 参数描述:
max_digits:总位数(不包括小数点和符号)
decimal_places:小数位数。如:要保存最大值为 999 (小数点后保存2位),你要这样定义字段:FloatField(…,max_digits=5, decimal_places=2),要保存最大值一百万(小数点后保存10位)的话,你要这样定义:FloatField(…,max_digits=19, decimal_places=10)
10、IntegerField ---整形 用于保存一个整数
11、BigIntegerField ---长整形
做完这个以后,需要migrate一下,然后数据库里就可以查到数据表了。
简单配置一下admin, 在app下面的admin里面, 先定义一个类,然后注册到admin里面。
@admin.register(employeelist)
class EmployeeAdmin(admin.ModelAdmin):
pass
然后建一个管理员账号
python manage.py createsuperuser
将项目启动起来:
python manage.py runserver
浏览器中打开 : http://localhost:8000/admin 就可以看到
登陆进去,见到的页面是这样子的。
新插入一条数据:
回到页面啥也没显示,赶紧加个显示列表:
list_display = ('id','name','sex','province','department','position','employee_in_time','leader_name')
现在还有一个问题,就是没有汉化。 admin界面汉化 默认admin后台管理界面是英文的,对英语盲来说用起来不方便。可以在settings.py中设置,
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
DATETIME_FORMAT = 'Y年m月d日 H:i:s'
DATE_FORMAT = 'Y年m月d日'
还可以更改项目的显示名称:
admin.site.site_header = '旗杨后台管理系统'
admin.site.site_title = '旗杨后台管理系统'
admin.site.index_title = '员工管理'
admin.site.site_url = ''
在models里面定义:
class Meta:
verbose_name_plural = verbose_name = "员工信息" # 该模型在后台显示的名称
Django后台APP名字改为中文
# yourapp/apps.py
from django.apps import AppConfig
class YourAppConfig(AppConfig):
name = 'yourapp'
verbose_name = 'xx系统'
然后修改yourapp/init.py,设置default_app_config为YourAppConfig
# yourapp/__init__.py
default_app_config = 'yourapp.apps.YourAppConfig'
现在看起来就是这样的
我们可以对后台实现更多的定制化,这个很方便。 ModelAdmin中提供了大量的可定制功能,如: 1.list_display,列表时,定制显示的列
list_display = ('id','name','sex','province','department','position','employee_in_time','leader_name')
#list_per_page设置每页显示多少条记录,默认是100条
list_per_page = 50
#ordering设置默认排序字段,负号表示降序排序
ordering = ('-publish_time',)
list_filter,列表时,定制右侧快速筛选。
list_filter = ["publish","authors"]
ModelAdmin中提供了大量的可定制功能,如
from django.contrib import admin
# Register your models here.
from .models import employeelist
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
DATETIME_FORMAT = 'Y年m月d日 H:i:s'
DATE_FORMAT = 'Y年m月d日'
admin.site.site_header = '旗杨后台管理系统'
admin.site.site_title = '旗杨后台管理系统'
admin.site.index_title = '员工管理'
admin.site.site_url = ''
@admin.register(employeelist)
class EmployeeAdmin(admin.ModelAdmin):
list_display = ['id','name','sex','province','department','position','employee_in_time','leader_name']
# list_per_page设置每页显示多少条记录,默认是100条
list_per_page = 50
# ordering设置默认排序字段,负号表示降序排序
ordering = ('-employee_in_time',)
list_display_links = ['id','leader_name']
list_filter = ["name", "department","leader_name"]
#列表时,可以编辑的列
list_editable = ['department']
#search_fields,列表时,模糊搜索的功能
search_fields = ('name', 'department')
date_hierarchy = 'employee_in_time' # 详细时间分层筛选
#fields = ('name',)
readonly_fields = ('province',)
显示成这个样子的