Введение
В этом проекте мы научимся создавать REST API на Flask, используя SQLite в качестве базы данных. Мы начнем с создания примерной базы данных SQLite и заполнения ее некоторыми данными. Затем мы создадим приложение на Flask с конечными точками (endpoints) для выполнения операций CRUD (создание, чтение, обновление, удаление) над данными в базе данных SQLite.
👀 Предварительный просмотр

🎯 Задачи
В этом проекте вы научитесь:
- Создавать приложение на Flask с использованием SQLite в качестве бэкэнда базы данных
- Создавать примерную базу данных и таблицу в SQLite
- Заполнять таблицу базы данных примерными данными
- Реализовывать конечные точки (endpoints) для получения всех пользователей, получения конкретного пользователя по идентификатору, создания нового пользователя, обновления существующего пользователя и удаления пользователя
- Тестировать конечные точки REST API с помощью cURL или браузера
🏆 Достижения
После завершения этого проекта вы сможете:
- Создавать приложение на Flask с использованием SQLite в качестве базы данных
- Выполнять операции CRUD над данными в базе данных SQLite с помощью Flask
- Реализовывать и тестировать конечные точки REST API для приложения на Flask
Создание файлов проекта
Начнем с создания необходимых файлов проекта для нашего приложения на Flask.
- Перейдите в директорию
~/projectс помощью командыcd. - Внутри директории проекта создайте новый Python-файл с именем
app.py. - Создайте новый файл с именем
create_database.pyв той же директории.
cd ~/project
touch app.py create_database.py
Структура вашего проекта должна выглядеть следующим образом:
project/
├── app.py
└── create_database.py
Создание примерной базы данных SQLite
Далее, давайте создадим базу данных SQLite и заполним ее примерными данными с использованием Python и библиотеки SQLite.
В файле create_database.py добавьте следующий код для импорта необходимых модулей:
import sqlite3
Добавьте следующий код для создания базы данных и таблицы:
## Create a connection to the database
conn = sqlite3.connect('example.db')
## Create a cursor object to execute SQL statements
cursor = conn.cursor()
## Create a table called "users"
cursor.execute('''CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT,
email TEXT
)''')
Далее, давайте вставим некоторые примерные данные в таблицу:
## Insert sample data into the "users" table
users = [
('John Doe', 'johndoe@example.com'),
('Jane Smith', 'janesmith@example.com'),
('Bob Johnson', 'bobjohnson@example.com')
]
cursor.executemany('INSERT INTO users (name, email) VALUES (?,?)', users)
## Commit the changes to the database
conn.commit()
## Close the cursor and the database connection
cursor.close()
conn.close()
cd ~/project
python create_database.py
После выполнения этого кода у вас будет файл базы данных SQLite с именем example.db с таблицей "users", содержащей примерные данные. Эта база данных будет использоваться в нашем приложении на Flask для получения и манипуляции данными.
Создание REST API на Flask
Теперь давайте создадим REST API на Flask, используя базу данных SQLite example.db, которую мы создали ранее.
В файле app.py добавьте следующий код для импорта необходимых модулей:
from flask import Flask, jsonify, request
import sqlite3
Добавьте следующий код для создания приложения на Flask:
## Create the Flask application
app = Flask(__name__)
Теперь определим конечные точки (endpoints) для нашего REST API:
Конечная точка для получения всех пользователей
## Endpoint to retrieve all users
@app.route('/users', methods=['GET'])
def get_users():
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to retrieve all users
cursor.execute('SELECT * FROM users')
users = cursor.fetchall()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Return the users as JSON
return jsonify(users)
В этом коде мы сначала подключаемся к базе данных SQLite с помощью метода connect(). Затем создаем объект курсора для выполнения SQL-выражений с помощью метода cursor(). Далее выполняем SQL-запрос для получения всех пользователей из таблицы "users" с помощью метода execute(). Наконец, закрываем курсор и соединение с базой данных с помощью метода close() и возвращаем пользователей в формате JSON с помощью метода jsonify().
Конечная точка для получения конкретного пользователя по идентификатору
## Endpoint to retrieve a specific user by ID
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to retrieve the user by ID
cursor.execute('SELECT * FROM users WHERE id =?', (user_id,))
user = cursor.fetchone()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Check if the user exists
if user:
return jsonify(user)
else:
return jsonify({'message': 'User not found'}), 404
Эта конечная точка похожа на предыдущую, за исключением того, что она получает конкретного пользователя по идентификатору, а не всех пользователей. Мы используем метод fetchone() для получения одного пользователя из таблицы "users".
Конечная точка для создания нового пользователя
## Endpoint to create a new user
@app.route('/users', methods=['POST'])
def create_user():
## Get the user data from the request body
data = request.get_json()
name = data['name']
email = data['email']
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to insert a new user
cursor.execute('INSERT INTO users (name, email) VALUES (?,?)', (name, email))
conn.commit()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Return a success message
return jsonify({'message': 'User created successfully'})
Эта конечная точка используется для создания нового пользователя в таблице "users". Мы используем метод get_json() для получения данных пользователя из тела запроса. Затем используем метод execute() для вставки нового пользователя в таблицу "users".
Конечная точка для обновления существующего пользователя
## Endpoint to update an existing user
@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
## Get the updated user data from the request body
data = request.get_json()
name = data['name']
email = data['email']
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to update the user
cursor.execute('UPDATE users SET name =?, email =? WHERE id =?', (name, email, user_id))
conn.commit()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Return a success message
return jsonify({'message': 'User updated successfully'})
Эта конечная точка используется для обновления существующего пользователя в таблице "users". Мы используем метод get_json() для получения обновленных данных пользователя из тела запроса. Затем используем метод execute() для обновления пользователя в таблице "users".
Конечная точка для удаления пользователя
## Endpoint to delete a user
@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to delete the user
cursor.execute('DELETE FROM users WHERE id =?', (user_id,))
conn.commit()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Return a success message
return jsonify({'message': 'User deleted successfully'})
Эта конечная точка используется для удаления пользователя из таблицы "users". Мы используем метод execute() для удаления пользователя из таблицы "users".
Наконец, добавим следующий код для запуска приложения на Flask:
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=8080)
Запуск приложения на Flask
Для запуска проекта и старта приложения на Flask откройте терминал или командную строку, перейдите в директорию проекта и выполните следующую команду:
cd ~/project
python app.py
Вы должны увидеть вывод, похожий на следующий:
* Serving Flask app 'app' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
Это означает, что приложение на Flask запущено локально на вашем компьютере. Теперь вы можете протестировать конечные точки (endpoints) REST API с помощью инструмента, такого как cURL, или инструмента для тестирования API, такого как Postman.
Тестирование конечных точек REST API
- Откройте новый терминал или командную строку.
- Используйте следующие команды cURL для тестирования каждой конечной точки:
- Получить всех пользователей:
curl http://localhost:8080/users
- Получить конкретного пользователя по идентификатору (замените
<user_id>на фактический идентификатор пользователя):
curl http://localhost:8080/users/<user_id>
- Создать нового пользователя:
curl -X POST -H "Content-Type: application/json" -d '{"name":"John Doe","email":"johndoe@example.com"}' http://localhost:8080/users
- Обновить существующего пользователя (замените
<user_id>на фактический идентификатор пользователя):
curl -X PUT -H "Content-Type: application/json" -d '{"name":"Updated Name","email":"updated@example.com"}' http://localhost:8080/users/<user_id>
- Удалить пользователя (замените
<user_id>на фактический идентификатор пользователя):
curl -X DELETE http://localhost:8080/users/<user_id>
При тестировании соответствующих конечных точек убедитесь, что вы заменяете <user_id> на фактический идентификатор пользователя в базе данных.
Выполняя эти команды cURL, вы можете протестировать функциональность конечных точек REST API и проверить, работают ли они корректно.
В качестве альтернативы вы можете переключиться на вкладку Web 8080, чтобы протестировать конечные точки REST API с помощью браузера.

С помощью этих шагов тестирования вы можете убедиться, что приложение на Flask и его конечные точки REST API работают как ожидается.
Резюме
В этом проекте мы научились создавать REST API на Flask с использованием SQLite в качестве базы данных. Мы создали примерную базу данных SQLite и заполнили ее данными. Затем мы разработали приложение на Flask с конечными точками (endpoints) для получения, создания, обновления и удаления пользователей из базы данных. Следуя пошаговым инструкциям, вы должны сейчас иметь функциональное приложение на Flask, которое предоставляет REST API для взаимодействия с базой данных SQLite.



