用Ubuntu22.04操作系统,结合MySQL数据库、mysqlclient、Django框架和Django REST框架创建一个简单的API服务器

概述

为了验证Ubuntu 22.04的MySQL 8.0.30与venv虚拟环境中的Django 3.2+Django REST framework是否能够使用Django官方推荐的mysqlclient进行协作,我们将创建一个简单的API服务器来进行环境配置的确认。Python版本为3.10.6。Python和MySQL已经安装完毕。

 

截至2022年8月10日,Django的最新版本为3.2.15,Django REST framework的最新版本为3.13.1。

$ python3 -m pip install Django==
image.png
$ python3 -m pip install djangorestframework==
image.png

创建数据库的步骤1

创建一个名为”test”的数据库,用于在Django中使用。

$ sudo mysql -u root
mysql> create database test;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

创建一个用于django连接MySQL的用户的步骤为2。

创建一个名为django的用户来连接Django到数据库的test。并赋予其完全权限。

mysql> CREATE USER 'django'@'localhost' IDENTIFIED BY 'password';
mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| debian-sys-maint | localhost |
| django           | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
| windows          | localhost |
+------------------+-----------+
7 rows in set (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON test.* TO 'django'@'localhost';
mysql> show grants for 'django'@'localhost';
+----------------------------------------------------------+
| Grants for django@localhost                              |
+----------------------------------------------------------+
| GRANT USAGE ON *.* TO `django`@`localhost`               |
| GRANT ALL PRIVILEGES ON `test`.* TO `django`@`localhost` |
+----------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> exit

创建venv虚拟环境并安装Django和Django REST framework的步骤,

创建一个venv虚拟环境,然后更新其中的pip工具到最新版本。然后,执行安装Django最新版本(3.2)和Django REST框架最新版本的命令。

$ mkdir solution
$ cd solution
solution$ python3 -m venv .venv_drf
solution$ source .venv_drf/bin/activate
(.venv_drf) solution$ python -m pip install --upgrade pip
(.venv_drf) solution$ python -m pip install Django==3.2.*
(.venv_drf) solution$ python -m pip install djangorestframework
(.venv_drf) solution$ deactivate
solution$ cd

在venv虚拟环境中安装mysqlclient的步骤4。

在安装了MySQL开发头文件和库后,在步骤3中创建的venv虚拟环境中安装mysqlclient。

$ sudo apt-get install python3-dev default-libmysqlclient-dev build-essential
$ cd solution
solution$ source .venv_drf/bin/activate
(.venv_drf) solution$ python -m pip install mysqlclient
image.png

创建一个简单的API服务器的步骤5

image.png
(.venv_drf) solution$ django-admin startproject config .
(.venv_drf) solution$ python manage.py startapp shop
(.venv_drf) solution$ python manage.py startapp apiv1

接下来,我参考了Git的程序,使用复制粘贴的方式进行了修改。在数据库连接的部分,我进行了如下改写以连接到MySQL。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'django',
        'PASSWORD': 'password',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

书写修改完成后,进行数据库迁移,创建用于登录的用户,并启动服务器。

(.venv_drf) solution$ python manage.py makemigrations shop
(.venv_drf) solution$ python manage.py migrate
(.venv_drf) solution$ python manage.py createsuperuser
(.venv_drf) solution$ python manage.py runserver
image.png
image.png

在测试中注册的”helloworld”也已经正确地存储到了MySQL数据库中。

mysql> show tables;
+----------------------------+
| Tables_in_test             |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| book                       |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
11 rows in set (0.00 sec)

mysql> select * from book;
+----------------------------------+------------+-------+----------------------------+
| id                               | title      | price | created_at                 |
+----------------------------------+------------+-------+----------------------------+
| 1ed4430ce21e4cd0a3064eb6a54b0e6a | helloworld |     1 | 2022-08-09 10:50:30.626551 |
+----------------------------------+------------+-------+----------------------------+
1 row in set (0.00 sec)
广告
将在 10 秒后关闭
bannerAds