有时候我们需要后台添加数据可以使用到admin站点管理:
Django能够根据定义的模型类自动地生成管理页面
1. 创建超级管理员
python manage.py createsuperuser
根据提示输入:
创建用户名、密码、邮箱
运行项目,此时报错,
Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。
百度后发现是端口被占用,需要杀掉进程,
cmd
netstat -ano|findstr 8000 找出占用8000端口的应用
tasklist |findstr 11568 查询出占用端口的应用
taskkill /pid 11568 /F 根据pid杀死进程
但是发现占用较多,每次都要杀掉进程感觉比较麻烦,所以就决定修改django默认的占用端口号;
直接在pycharm中进行修改:
修改端口后再运行,运行成功;’
2. 打开浏览器登录,
在地址栏中输入如下地址后回车http://127.0.0.1:8887/admin/
输入前面创建的用户名、密码完成登录
登录成功后界面如下:
但是并没有我们自己应用模型的入口,接下来进行第三步操作
3. 注册模型类
在自己应用中的admin.py文件中注册
打开projects/admin.py
文件,编写如下代码:
from django.contrib import admin
from .models import Projects
# 直接使用自带的站点
admin.site.register(Projects)
刷新后如下:
点击项目22后进入:
此刻发现名称项目22和项目11是从哪里来的原来是定义models中定义的:
再看一下:
verbose_name="项目11"
verbose_name_plural="项目22"
from django.db import models
# Create your models here.
class Projects(models.Model):
# 创建Projects模型类
name = models.CharField(verbose_name="项目名称",max_length=200,unique=True,help_text="项目名称")
leader = models.CharField(verbose_name="负责人",max_length=50,help_text="负责人")
tester = models.CharField(verbose_name="测试人员",max_length=50,help_text="测试人员")
programer = models.CharField(verbose_name="开发人员",max_length=50,help_text="开发人员")
publish_app=models.CharField(verbose_name="发布应用",max_length=50,help_text="发布应用")
desc = models.TextField(verbose_name="简要描述",max_length=200,help_text="简要描述")
#设定数据库名称等信息
class Meta:
db_table="tb_projects"
verbose_name="项目11"
verbose_name_plural="项目22"
4.Admin站点的展示效果可以通过自定义ModelAdmin类来进行控制、
在projects/admin.py
中定义:
from django.contrib import admin
from .models import Projects
class ProjectsAdmin(admin.ModelAdmin):
#指定在修改、新增中显示的字段,详情页控制
fields = ("name","leader","tester")
#指定展示列字段
list_display = ("id","name","leader","tester")
# # # 直接使用自带的站点
admin.site.register(Projects,ProjectsAdmin)
注意注册时需要将ProjectsAdmin类作为参数传进去;
再次运行:
展示和详情页
除了上面的还有以下控制字段:
# 控制列表展示数量
list_per_page = 2
# 控制展示字段,字段显示顺序和列表中顺序相同
list_display = ['id','btitle','bread','date']
# 指定搜索字段
search_fields = ['btitle']
# 控制执行按钮在上面或者在下面
actions_on_bottom = True
actions_on_top = False
# 设置过滤条件
list_filter = ['bread']
运行后发现每次编辑都没有代入名称:
需要修改models.py中:
from django.db import models
# Create your models here.
class Projects(models.Model):
# 创建Projects模型类
name = models.CharField(verbose_name="项目名称",max_length=200,unique=True,help_text="项目名称")
leader = models.CharField(verbose_name="负责人",max_length=50,help_text="负责人")
tester = models.CharField(verbose_name="测试人员",max_length=50,help_text="测试人员")
programer = models.CharField(verbose_name="开发人员",max_length=50,help_text="开发人员")
publish_app=models.CharField(verbose_name="发布应用",max_length=50,help_text="发布应用")
desc = models.TextField(verbose_name="简要描述",max_length=200,help_text="简要描述")
#设定数据库名称等信息
class Meta:
db_table="tb_projects"
verbose_name="项目"
verbose_name_plural="项目"
#带入名称
def __str__(self):
return self.name