Рубрики
Без рубрики

Создайте RESTFUL API с помощью Python / Flask

Комбинация структуры Python / Flask-один из популярных вариантов для построения API-интерфейсов для W … Tagged With Python, Tutorial, WebDev, новички.

Комбинация Python/Flask Framework является одним из популярных вариантов для построения API-интерфейсов для веб-приложения. Построение задней части приложения дает несколько вариантов для приготовления переднего конца с использованием различных технологических стеков.

В этой статье давайте пройдемся по шагам, связанным с созданием простого API для поддержания кавычек, используя флажок с базой данных SQLite в качестве хранилища данных.

Настройка проекта

Создать папку проекта – MKDIR COTES-API Настройка и активировать виртуальную среду – Настройка виртуальной среды Установите ниже пакеты в виртуальной среде Project:

 pip install flask
 pip install flask-sqlalchemy
 pip install flask-marshmallow

Настройка приложения

Создайте файл с именем app.py В папке проекта и добавьте необходимый импорт, код настройки приложений вместе с настройкой библиотеки Marshmallow, как показано ниже:

from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Column, Integer, String
from flask_marshmallow import Marshmallow
import os


#Application and database setup
app = Flask(__name__)
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'quotes.db')

db = SQLAlchemy(app)
# Marshmallow library is used for effective object serialization
ma = Marshmallow(app)

Настройка базы данных

Давайте добавим ниже код в app.py Файл, чтобы мы могли создать Цитаты Данные базы данных и семян через команды колбы.

#Database creation flask commands
@app.cli.command('db_create')
def db_create():
    db.create_all()
    print('Database created!')


@app.cli.command('db_drop')
def db_drop():
    db.drop_all()
    print('Database dropped!')


@app.cli.command('db_seed')
def db_seed():
    quote1 = Quote(quote_desc='It always seem impossible until it is done.',
                     quote_type='Motivation',
                     author='Nelson Mandela')

    quote2 = Quote(quote_desc='With the new day comes new strength and new thoughts.',
                         quote_type='Motivation',
                         author='Eleanor Roosevelt')

    quote3 = Quote(quote_desc='The secret of getting ahead is getting started.',
                     quote_type='Motivation',
                     author='Mark Twain')

    quote4 = Quote(quote_desc='With self-discipline most anything is possible.',
                     quote_type='Inspiration',
                     author='Theodore Roosevelt')

    quote5 = Quote(quote_desc='It is during our darkest moments that we must focus to see the light.',
                     quote_type='Inspiration',
                     author='Aristotle')


    db.session.add(quote1)
    db.session.add(quote2)
    db.session.add(quote3)
    db.session.add(quote4)
    db.session.add(quote5)
    db.session.commit()
    print('Database seeded!')


# database model
class Quote(db.Model):
    __tablename__ = 'quotes'
    quote_id = Column(Integer, primary_key = True)
    quote_desc = Column(String)
    quote_type = Column(String)
    author = Column(String)


# Quote model added to the Marshmallow library for JSON serialization
class QuoteSchema(ma.Schema):
    class Meta:
        fields = ('quote_id', 'quote_desc', 'quote_type', 'author')


quote_schema = QuoteSchema()
quotes_schema = QuoteSchema(many=True)

Выполните ниже код в виртуальной среде проекта для создания и заселения данных:

flask db_create
flask db_seed 

CRUD Operations

Теперь, когда вся часть настройки завершена, ниже методы добавлены в app.py Помощь файла выполнить фактические операции CRUD (создать, прочитать, обновить и удалять). Обратите внимание на соответствующее использование методов HTTP и кодов состояния для обозначения успеха или неудачи конкретной конечной точки API.

Читать конечную точку

@app.route('/quotes', methods=['GET'])
def quotes():
    quotes_list = Quote.query.all()
    result = quotes_schema.dump(quotes_list)
    return jsonify(result)


@app.route('/quote_details/', methods=['GET'])   
def quote_details(quote_id: int):
    quote = Quote.query.filter_by(quote_id=quote_id).first()
    if quote:
        result = quote_schema.dump(quote)
        return jsonify(result)
    else:
        return jsonify(message="That quote does not exist."), 404

Добавьте конечную точку

@app.route('/add_quote', methods=['POST'])   
def add_quote():
    quote_desc = request.form['quote_desc']
    test = Quote.query.filter_by(quote_desc=quote_desc).first()
    if test:
        return jsonify(message="There is already a quote by that description."), 409
    else:
        quote_type= request.form['quote_type']
        author= request.form['author']
        quote =  Quote(quote_desc=quote_desc,
                         quote_type= quote_type,
                         author= author)  
        db.session.add(quote)
        db.session.commit()                 
        return jsonify(message="Quote added successfully!"), 201

Обновите конечную точку

@app.route('/update_quote/', methods=['PUT'])   
def update_quote(quote_id : int):
    quote = Quote.query.filter_by(quote_id=quote_id).first()
    if quote:
        quote.quote_desc = request.form['quote_desc']
        quote.quote_type = request.form['quote_type']
        quote.author= request.form['author']
        db.session.commit()                 
        return jsonify(message="Quote successfully updated!")
    else:
        return jsonify(message="That quote does not exist"), 404

Удалить конечную точку

@app.route('/remove_quote/', methods=['DELETE'])   
def remove_quote(quote_id : int):
    quote = Quote.query.filter_by(quote_id=quote_id).first()
    if quote:
        db.session.delete(quote)
        db.session.commit()                 
        return jsonify(message="Quote successfully deleted!"), 200
    else:
        return jsonify(message="That quote does not exist"), 404

Как проверить API?

Добавьте ниже код в конце файла app.py, чтобы мы могли запустить приложение, используя Python app.py Анкет Конечные точки API могут быть проверены с использованием Почтальон заявление.

if __name__ == '__main__':
    app.run()

Следующие шаги:

  • Расширить API, чтобы обеспечить больше конечных точек
  • Защита API с помощью JWT
  • Создайте фронт-эн, используя React.js, Vue.js или любую другую подходящую технологию
  • Развертывание встроенного API путем установки сервера жалоб WSGI на любой из облачных платформ

Дальнейшее обучение:

Оригинал: “https://dev.to/dev0928/build-restful-apis-using-python-flask-56c7”