Django实战 (6)—— Admin 管理

前文

Django 实战 (1)—— 创建第一个Django项目
Django 实战 (2)—— 视图与 URL 配置
Django 实战 (3)—— Django 是怎么处理请求的?
Django 实战 (4)—— 连接 MySQL
Django 实战 (5)—— 数据库操作

Admin

配置 admin

首先,我们需要在 settings.py 文件中增加以下东西

Django 自动管理工具是 django.contrib 的一部分 , django.contrib是一套庞大的功能集,它是Django基本代码的组成部分

INSTALLED_APPS = [
    # 主要是这两个
    'django.contrib.admin',
    'django.contrib.auth',
    
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

然后我们需要在 urls.py 中配置一个 admin 的页面,一般是默认打开的

from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

创建超级用户

在 terminal 中输入以下命令创建超级用户

python manage.py createsuperuser  # 创建超级用户

输入命令回车的时候有可能会报错,报错信息如下:

Traceback (most recent call last):
  File "D:\python-3.7.1\lib\site-packages\django\db\backends\base\base.py", line 216, in ensure_connection

    self.connect()
  File "D:\python-3.7.1\lib\site-packages\django\db\backends\base\base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "D:\python-3.7.1\lib\site-packages\django\db\backends\mysql\base.py", line 227, in get_new_connecti
on
    return Database.connect(**conn_params)
  File "D:\python-3.7.1\lib\site-packages\MySQLdb\__init__.py", line 84, in Connect
    return Connection(*args, **kwargs)
  File "D:\python-3.7.1\lib\site-packages\MySQLdb\connections.py", line 179, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
MySQLdb._exceptions.OperationalError: (2002, "Can't connect to MySQL server on 'localhost' (10061)")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "D:\python-3.7.1\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_c
ommand_line
    utility.execute()
  File "D:\python-3.7.1\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "D:\python-3.7.1\lib\site-packages\django\core\management\base.py", line 316, in run_from_argv
    self.execute(*args, **cmd_options)
  File "D:\python-3.7.1\lib\site-packages\django\contrib\auth\management\commands\createsuperuser.py", lin
e 59, in execute
    return super().execute(*args, **options)
  File "D:\python-3.7.1\lib\site-packages\django\core\management\base.py", line 352, in execute
    self.check_migrations()
  File "D:\python-3.7.1\lib\site-packages\django\core\management\base.py", line 442, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
  File "D:\python-3.7.1\lib\site-packages\django\db\migrations\executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
  File "D:\python-3.7.1\lib\site-packages\django\db\migrations\loader.py", line 49, in __init__
    self.build_graph()
  File "D:\python-3.7.1\lib\site-packages\django\db\migrations\loader.py", line 212, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "D:\python-3.7.1\lib\site-packages\django\db\migrations\recorder.py", line 61, in applied_migration
s
    if self.has_table():
  File "D:\python-3.7.1\lib\site-packages\django\db\migrations\recorder.py", line 44, in has_table
    return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.curs
or())
  File "D:\python-3.7.1\lib\site-packages\django\db\backends\base\base.py", line 255, in cursor
    return self._cursor()
  File "D:\python-3.7.1\lib\site-packages\django\db\backends\base\base.py", line 232, in _cursor
    self.ensure_connection()
  File "D:\python-3.7.1\lib\site-packages\django\db\backends\base\base.py", line 216, in ensure_connection

    self.connect()
  File "D:\python-3.7.1\lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "D:\python-3.7.1\lib\site-packages\django\db\backends\base\base.py", line 216, in ensure_connection

    self.connect()
  File "D:\python-3.7.1\lib\site-packages\django\db\backends\base\base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "D:\python-3.7.1\lib\site-packages\django\db\backends\mysql\base.py", line 227, in get_new_connecti
on
    return Database.connect(**conn_params)
  File "D:\python-3.7.1\lib\site-packages\MySQLdb\__init__.py", line 84, in Connect
    return Connection(*args, **kwargs)
  File "D:\python-3.7.1\lib\site-packages\MySQLdb\connections.py", line 179, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
django.db.utils.OperationalError: (2002, "Can't connect to MySQL server on 'localhost' (10061)")

原因是因为我们的数据库中可能某个表不存在,我们只需要创建表就行了,输入以下命令即可

python manage.py createsuperuser  # 让 Django 知道我们在我们的模型有一些变更

python manage.py migrate          # 创建表结构

接下来我们再次输入创建超级用户的命令

python manage.py createsuperuser  # 创建超级用户

输入命令回车之后会有以下东西要你输入

Username (leave blank to use 'administrator'): 
Email address: 
Password:
Password (again):
Superuser created successfully.

然后我们启动一下服务,访问 http://127.0.0.1:8000/admin

输入我们刚刚创建超级用户的用户名和密码

OK,已经成功登录了

使用 admin 管理数据模型

admin 除了是一个后台用户管理之外还可以帮助我们管理数据模型(没想到吧哈哈),但是怎么才能让 admin 管理我们的数据模型呢?我们需要先注册该数据到 admin ,比如,我们之前创建了一个 Test 表 (模型),我们就可以在 admin.py (admin.py 是我们创建的)文件中注册一下这个数据模型,具体如下:

from django.contrib import admin
from webapp.views import Test

# Register your models here.

admin.site.register(Test) # 注册数据模型,register()括号里面就是你要注册的数据模型的名称

我们重新启动一下服务,,可以看到我们 webapp 中的 Test 已经被加载进来了

发布了184 篇原创文章 · 获赞 864 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/Woo_home/article/details/103785921