Django(7)Admin管理工具(一)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Django(7)Admin管理工具(一)
>>> 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',
]

3b90f25bcb7045099fd7d0367f6d722d.png


二、使用管理工具


(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

5ccc2b56a56e4015bf77cf7a0c01159a.png

  • 访问127.0.0.1:8000/admin/


3f03f61250354071b65ce65eca1533d0.png

  • 我们可以通过命令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,输入刚刚创建的用户名密码



8b0f13eb077047a38cfe152e1731d14f.png

0a604e176ab74532b57ce570496eb7e3.png

(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管理页面,可以发现刚刚创建的数据表已经注册成功


9a95e352832a4a899d98eb4a4e76e06f.png

  • 点进入数据表可以直接进行修改


988fa6e49551474d9dca879d0df02da2.png

  • 点击增加AAA


9690e7a97e2c4d64b1c6e167b8d9a6da.png

  • 可以发现,字段都是对应的,填写字段数据,然后点击保存,会提示成功添加


注意:id的值是自增,因为是django默认增加的主键,所以这里只有name和age两个字段


ab76fbdede60400089d71238d51de425.png


a5033393b4bf4d2caa1e4a5e7f007cd0.png

去数据库中查看,可以发现上面图片的object(7)和数据表中id字段的值7是对应的,就表示,已经增加过7条数据了


e98673429e034894930335f0ef69c7f6.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
数据管理 数据库 数据安全/隐私保护
Django——Auth模块以及admin站点
Django——Auth模块以及admin站点
|
6月前
|
Python
百度搜索:蓝易云【Django自带的Admin后台中如何获取当前登录用户】
在上面的代码中,`@staff_member_required`装饰器确保只有管理员可以访问 `my_custom_view`视图,而 `@login_required`装饰器确保只有登录的用户可以访问该视图。然后,可以使用 `request.user.username`获取当前登录用户的用户名,并将其传递到模板中进行显示或其他操作。
56 3
|
6月前
|
人工智能 开发工具 数据库
Django实践-03模型-02基于admin管理表
Django实践-03模型-02基于admin管理表
Django实践-03模型-02基于admin管理表
|
数据安全/隐私保护 Python
27 Django高级- Admin站点
27 Django高级- Admin站点
56 0
|
Linux Python
django -- admin里的配置
django -- admin里的配置
|
数据库 数据安全/隐私保护 Python
08-Django-基础篇-admin管理后台
08-Django-基础篇-admin管理后台
|
XML 关系型数据库 MySQL
【Django】当大型项目采用Django框架对于QueryDict以及模板的表单在Admin 管理工具的使用
【Django】当大型项目采用Django框架对于QueryDict以及模板的表单在Admin 管理工具的使用
165 0
【Django】当大型项目采用Django框架对于QueryDict以及模板的表单在Admin 管理工具的使用
|
数据可视化 数据库 Python
Django(7)Admin管理工具(二)
Django(7)Admin管理工具(二)
148 0
Django(7)Admin管理工具(二)
|
中间件 数据库 Python
【Django知识补充 - 1】:admin站点和rest_framework实现文件的上传和下载
【Django知识补充 - 1】:admin站点和rest_framework实现文件的上传和下载
299 0
【Django知识补充 - 1】:admin站点和rest_framework实现文件的上传和下载
|
Python
【Django学习笔记 - 15】:admin站点编辑(关联对象在列表页中添加,编辑页调整、图片设置)2
【Django学习笔记 - 15】:admin站点编辑(关联对象在列表页中添加,编辑页调整、图片设置)
101 0
【Django学习笔记 - 15】:admin站点编辑(关联对象在列表页中添加,编辑页调整、图片设置)2