admin后台管理站点
很多时候,我们不光要开发针对客户使用的前端页面,还要给后台管理人员提供相应的管理界面。但是大多数时候为你的团队或客户编写用于增加、修改和删除内容的后台管理站点是一件非常乏味的工作并且没有多少创造性,而且也需要花不少的时间和精力。Django最大的优点之一,就是体贴的为你提供了一个基于项目model创建的一个后台管理站点admin。这个界面只给站点管理员使用,并不对大众开放。虽然admin的界面可能不是那么美观,功能不是那么强大,内容不一定符合你的要求,但是它是免费的、现成的,并且还是可定制的,有完善的帮助文档。
这个就是Django自带的默认的后台管理界面(管理可以登陆后台的用户),当然我们也可以修改这个界面:
如何快速创建一个Django项目的后台管理界面?
一、在数据库初迁移
Django默认是使用sqlite数据库的,(数据库初始化完才可以创建管理员账号)
首先你要先创建你的一个Django项目:不懂的参考这里,我这里创建的项目名为myweb
然后进入你的项目目录,执行数据迁移命令:
python manage.py makemigrations
python manage.py migrate
[root@22:14:16 ~/testDjango/myweb]$ ls
db.sqlite3 manage.py my_venv myweb
[root@21:51:30 ~/testDjango/myweb]$ python manage.py makemigrations
No changes detected
[root@21:54:13 ~/testDjango/myweb]$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK```
二、创建管理员账号
创建管理员账号:python manage.py createsuperuser
[root@21:54:47 ~/testDjango/myweb]$ python manage.py createsuperuser
Username (leave blank to use 'root'): root
Email address: wxxx@163.com
Password:
Password (again):
This password is too short. It must contain at least 8 characters.
This password is entirely numeric.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
三、运行项目且访问
运行项目:python manage.py runserver 0:8002
[root@21:57:35 ~/testDjango/myweb]$ python manage.py runserver 0:8002
Performing system checks...
System check identified no issues (0 silenced).
February 22, 2020 - 13:57:43
Django version 2.1.5, using settings 'myweb.settings'
Starting development server at http://0:8002/
Quit the server with CONTROL-C.
访问:
浏览器地址栏中输入:http://你的IP:8002/admin/
输入你设置的账号密码登陆,就可以进入后台系统了
四、使用admin模块管理数据库的数据
首先我们创建一个Django App(名为app1
),并且进入到App目录
[root@22:32:32 ~/testDjango/myweb]$ python manage.py startapp app1
[root@22:34:35 ~/testDjango/myweb]$ ls
app1 db.sqlite3 manage.py my_venv myweb nohup.out
[root@22:34:37 ~/testDjango/myweb]$ cd app1
[root@22:51:15 ~/testDjango/myweb/app1]$ ls
admin.py apps.py __init__.py migrations models.py __pycache__ tests.py views.py
创建完之后,在myweb/settings.py
添加你的app1路径:
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app1',
]
修改 app1目录下的models.py :
创建的Question和Choice类,都继承了Django的models.Model类,他们实现的功能大概是创建了两个表(表名自动生成),表中对应创建了几个字段question_text 、pub_date 、question 、choice_text 、votes
from django.db import models
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
然后就是更新这个数据库信息(迁移数据库):
migrations的功能非常强大,允许你随时修改你的模型,而不需要删除或者新建你的数据库或数据表,在不丢失数据的同时,实时动态更新数据库。我们将在后面的章节对此进行深入的阐述,但是现在,只需要记住修改模型时的操作分三步:
- 在
models.py
中修改模型; - 运行
python manage.py makemigrations
为改动创建迁移记录; - 运行
python manage.py migrate
,将操作同步到数据库。
[root@22:48:15 ~/testDjango/myweb]$ python manage.py makemigrations
Migrations for 'app1':
app1/migrations/0001_initial.py
- Create model Choice
- Create model Question
- Add field question to choice
[root@22:49:39 ~/testDjango/myweb]$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, app1, auth, contenttypes, sessions
Running migrations:
Applying app1.0001_initial... OK
在admin中注册应用:
现在还无法看到应用,必须先在admin中进行注册,告诉admin站点,请将app1的模型加入站点内,接受站点的管理。
打开app1/admin.py
文件,加入下面的内容:
from django.contrib import admin
from .models import Question
from .models import Choice
# Register your models here.
admin.site.register(Question)
admin.site.register(Choice)
然后刷新你的浏览器界面可以看到新增了两个栏目了:
这里就相当于可以对数据库中的两张表进行操作了(可以对表中的数据进行操作):
这里需要注意的是:
- 页面中的表单是由Question模型自动生成的。
- 不同的模型字段类型(DateTimeField, CharField)会表现为不同的HTML input框类型。
- 每一个DateTimeField都会自动生成一个可点击链接。日期是Today,并有一个日历弹出框;时间是Now,并有一个通用的时间输入列表框。
在页面的底部,则是一些可选项按钮:
- delete:弹出一个删除确认页面
- save and add another:保存当前修改,并加载一个新的空白的当前类型对象的表单。
- save and continue editing:保存当前修改,并重新加载该对象的编辑页面。
- save:保存修改,返回当前对象类型的列表页面。
参考:https://www.liujiangblog.com/course/django/88