DjangoAdmin管理工具

Posted 礁之

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DjangoAdmin管理工具相关的知识,希望对你有一定的参考价值。

文章目录


此文章参考菜鸟教程:Django Admin 管理工具 | 菜鸟教程 (runoob.com)

Django版本:

>>> 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 |  #主键自动增长
DjangoAdmin管理工具

DjangoAdmin管理工具

DjangoAdmin管理工具

DjangoAdmin管理工具

Djangoadmin相关知识

Django Admin - 特定用户(管理员)内容