Создание REST API на Flask с использованием SQLite

PythonBeginner
Практиковаться сейчас

Введение

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

👀 Предварительный просмотр

Предварительный просмотр Flask SQLite API

🎯 Задачи

В этом проекте вы научитесь:

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

🏆 Достижения

После завершения этого проекта вы сможете:

  • Создавать приложение на Flask с использованием SQLite в качестве базы данных
  • Выполнять операции CRUD над данными в базе данных SQLite с помощью Flask
  • Реализовывать и тестировать конечные точки REST API для приложения на Flask

Создание файлов проекта

Начнем с создания необходимых файлов проекта для нашего приложения на Flask.

  1. Перейдите в директорию ~/project с помощью команды cd.
  2. Внутри директории проекта создайте новый Python-файл с именем app.py.
  3. Создайте новый файл с именем 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

  1. Откройте новый терминал или командную строку.
  2. Используйте следующие команды 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 с помощью браузера.

REST API testing interface

С помощью этих шагов тестирования вы можете убедиться, что приложение на Flask и его конечные точки REST API работают как ожидается.

Резюме

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

✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться