用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==
$ python3 -m pip install djangorestframework==
创建数据库的步骤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
创建一个简单的API服务器的步骤5
(.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
在测试中注册的”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)