>>> django.VERSION (4, 1, 0, 'final', 0)
PS:基于前几章的进度进行修改
一、概述
- 使用Django Admin可以快速对数据库的各个数据表进行增删查改。
一行代码即可增加对一个模型(数据表)的增删查改。
试想如果你要自己手动编写后台对一个模型进行增删查改,你一般需要4个urls, 4个视图函数或通用视图和4个模板。当一个项目比较大包含多个app时,而每个app又包含多个模型(数据表)时, 那么编写和维护整个项目管理后台的工作量可想而知。Django Admin所做就是将所有需要管理的模型(数据表)集中在一个平台,你不仅可以选择性地管理模型(数据表), 你还可以快速订制数据条目查询,过滤和搜索条件。
- Django提供了基于Web的管理工具,这个管理工具是
django.contrib
的一部分,可以在项目的settings.py
中的INSTALLED_APPS
看到 django.contrib
是一套庞大的功能集,它是Django基本代码的组成部分
- /helloworld/helloworld/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'TestModel', ]
二、使用管理工具
(1)激活管理工具
- 在生成项目时,urls.py文件会自动设置好管理工具,资源路径为
admin/
,只需要去掉注释即可
- helloworld/urls.py #-*- coding: utf-8 -*- from django.urls import path,include from django.contrib import admin urlpatterns = [ path('admin/',admin.site.urls), ]
- 启动Django
- 访问
127.0.0.1:8000/admin/
- 我们可以通过命令
python manage.py createsuperuser
创建超级用户:
(test) PS F:\django\helloworld> python .\manage.py createsuperuser 用户名 (leave blank to use 'root'): admin #输入用户名 电子邮件地址: admin@163.com #邮箱地址 Password: #密码123456.com Password (again): Superuser created successfully. (test) PS F:\django\helloworld> python .\manage.py runserver 0.0.0.0:8000 #启动 Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). September 02, 2022 - 16:09:39 Django version 4.1, using settings 'helloworld.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CTRL-BREAK.
- 再次访问
127.0.0.1:8000/admin
,输入刚刚创建的用户名密码
(2)使用管理工具
- 成功进入后,发现没任何数据表,这是因为还需要注册该数据模型到
admin
,现在先创建数据表
注意:需要先连接到mysql数据,可以参考之前模型那章
(test) PS F:\django\helloworld> django-admin startapp TestModel #创建数据模型,数据模型为TestModel (test) PS F:\django\helloworld> ls 目录: F:\django\helloworld Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2022/8/17 14:17 helloworld d----- 2022/8/18 10:45 static d----- 2022/8/17 14:17 templates d----- 2022/8/18 13:57 TestModel #创建了一个TestModel的目录 -a---- 2022/8/17 10:49 0 db.sqlite3 -a---- 2022/8/17 10:49 688 manage.py (test) PS F:\django\helloworld> cd TestModel #进入目录 (test) PS F:\django\helloworld\TestModel> ls #查看目录结构 目录: F:\django\helloworld\TestModel Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2022/8/18 13:57 migrations -a---- 2022/8/18 13:57 66 admin.py -a---- 2022/8/18 13:57 156 apps.py -a---- 2022/8/18 13:57 60 models.py -a---- 2022/8/18 13:57 63 tests.py -a---- 2022/8/18 13:57 66 views.py -a---- 2022/8/18 13:57 0 __init__.py
- 修改Model文件
from django.db import models class Aaa(models.Model): #创建数据表,最终表名称为TestModel_aaa name = models.CharField(max_length=20) #两个字段,name和age,最终创建出还有一个id的主键字段 age = models.CharField(max_legth=3)
- 修改主app的settings.py文件
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'TestModel', #添加新的app ]
- 执行修改操作
(test) PS F:\django\helloworld> python manage.py migrate #执行对模型修改的操作 - 执行上面的命令后,查看mysql数据库,可以发现已经创建了数据表 mysql> show tables; +----------------------------+ | Tables_in_test | +----------------------------+ | auth_group | | auth_group_permissions | | auth_permission | | auth_user | | auth_user_groups | | auth_user_user_permissions | | django_admin_log | | django_content_type | | django_migrations | | django_session | +----------------------------+ 10 rows in set (0.00 sec) - 下面来创建TestModel模型的表 (test) PS F:\django\helloworld> python manage.py makemigrations TestModel #对操作进行记录,后面可以指定模型 #输出: - Create model Aaa (test) PS F:\django\helloworld> python manage.py migrate TestModel #执行对指定模型的修改 #输出: Applying TestModel.0001_initial... OK - 再次查看数据库,发现创建了TestModel_aaa 表 mysql> show tables; +----------------------------+ | Tables_in_test | +----------------------------+ | TestModel_aaa | #创建的表 | auth_group | | auth_group_permissions | | auth_permission | | auth_user | | auth_user_groups | | auth_user_user_permissions | | django_admin_log | | django_content_type | | django_migrations | | django_session | +----------------------------+ 11 rows in set (0.00 sec) - 查看表结构,可以看到 id 字段为主键 mysql> show create table TestModel_aaa; +---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TestModel_aaa | CREATE TABLE `TestModel_aaa` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `age` varchar(3) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> describe TestModel_aaa; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | bigint(20) | NO | PRI | NULL | auto_increment | #主键自动增长 | name | varchar(20) | NO | | NULL | | | age | varchar(3) | NO | | NULL | | +-------+-------------+------+-----+---------+----------------+ 3 rows in set (0.00 sec)
- 修改
TestModel/admin.py
文件
from django.contrib import admin from TestModel.models import Aaa #导入模块 # Register your models here. admin.site.register([Aaa]) #注册数据表
- 启动django,再次访问admin管理页面,可以发现刚刚创建的数据表已经注册成功
- 点进入数据表可以直接进行修改
- 点击
增加AAA
- 可以发现,字段都是对应的,填写字段数据,然后点击
保存
,会提示成功添加
注意:id的值是自增,因为是django默认增加的主键,所以这里只有name和age两个字段
去数据库中查看,可以发现上面图片的object(7)
和数据表中id字段的值7
是对应的,就表示,已经增加过7条数据了