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

Как построить reзов apis с python и колбой

Некоторое время я работаю с Python, но я просто должен был пробовать колбу недавно, поэтому я чувствовал, что было бы приятно писать об этом. В этом агитере я буду обсуждать в колбе и как вы можете …

Автор оригинала: Onwuka Gideon.

Некоторое время я работаю с Python, но я просто должен был пробовать колбу недавно, поэтому я чувствовал, что было бы приятно писать об этом. В этом агитере я буду обсуждать в колбе и как вы можете использовать его, чтобы создать appis reзов.

Flask – это микроразрушение на основе Python, которая позволяет быстро создавать веб-приложения; «Micro» в MicroFrameworks просто означает, что Flask Actions поддерживает простое, но расширяемое.

Что отдых?

Отдых является аббревиатурой для репрезентативной передачи состояния. Это архитектурный стиль, и подход к коммуникациям, которые часто используются в разработке веб-сервисов.

Отдых Веб-услуги – это способ обеспечения взаимодействия между компьютерными системами в Интернете. Соответствующие отдыхам веб-службы позволяют запросить системы доступа и манипулировать текстовыми представлениями веб-ресурсов с использованием равномерного и предопределенного набора операций без вождения бездействия.

Это руководство будет проходить вас через построение спокойных API с колбой в сочетании с другими расширениями – фляска-RESTFLAY, FLASK_MIGRATE, зефир и т. Д. В конце вы построите простую комментарию API. API будет иметь конечные точки, которые можно использовать для добавления категории, просмотра категорий, категорий обновлений, категории Удалить, Добавить комментарии и просмотреть комментарии.

Флэк не выходит из коробки со всем расширением, необходимым для построения полноценной API. Однако есть много расширения, которые можно подключить к колбе, чтобы вы построить удивительные API.

В конце этого руководства вы должны иметь эти конечные точки API:

Get -/API/Категория – Получить все категории пост -/API/Категория – Добавить новую категорию PUT -/API/Категория – Обновить категорию Удалить -/API/Категория – Удалить категорию Get -/API/Комментарий – Восстановить все Сохраненные комментарии Post -/API/Комментарий – Добавить новый комментарий

Прежде чем вы начнете

Убедитесь, что у вас есть Python3.x установлен в вашей системе.

Мы будем использовать PostgreSQL База данных для этого учебника. Установите базу данных Postgres, если у вас его не установлено.

Убедитесь, что Виртуальский установлен в вашей системе.

Шаг 0: Настройка приложения

Во-первых, создайте структуру приложения в любом месте в вашей системе:

  project/
  ├── app.py
  ├── migrate.py
  ├── Model.py
  ├── requirements.txt
  ├── resources
  │   └── Hello.py
  └── run.py

Если вы предпочитаете командную строку для создания папок и файлов, вы можете использовать команду ниже:

# Create folders
$ mkdir project && cd project && mkdir resources

# Create files
$ touch app.py migrate.py Model.py requirements.txt run.py config.py && cd resources && touch Hello.py && cd ../

Затем откройте свой терминал и CD (изменить каталог) в корневую папку приложений – проект.

Далее создайте и активируйте виртуальную среду.

VirtualenV – это инструмент для создания изолированных средов Python. Virtualenv создает папку, которая содержит все необходимые исполняемые файлы для использования пакетов, которые нуждается в проекте Python.

Создает виртуальную среду:

$ python3.6 -m venv env

ИЛИ ЖЕ:

$ python -m venv env

Команда использовать зависит от того, какие ассоциированные с установкой Python3.

Активирует виртуальную среду:

“ `$ Источник ENV/Bin/Activate`

Добавьте следующие расширения к требованиям .txt:

flask==0.12.2
flask_restful==0.3.6
flask_script==2.0.6
flask_migrate==2.1.1
marshmallow==2.14.0
flask_sqlalchemy==2.3.2
flask_marshmallow==0.8.0
marshmallow-sqlalchemy==0.13.2
psycopg2==2.7.5

Вышеуказанный файл содержит все расширения Python, наш API будет использовать.

колба – это микроразмерные работы для Python

FLASK_RESTFFAL – это расширение для колбы, которая добавляет поддержку для быстрого строения API.

FLASK_Script – это расширение, которое обеспечивает поддержку для записи внешних скриптов в колбе.

FLASK_MIGRATE – это расширение, которое обрабатывает миграции баз данных SQLALCHEMY для приложений в колбе с использованием ALEMBIC.

Barshmallow – это формальная библиотека ORM/ODM/Framework-Agnostic для преобразования сложных данных типов данных, таких как объекты, в и от нативных типографии Python. Мы будем использовать это для проверки. Это используется для сериализации и десериализации объектов.

FLASK_SQLALCHEMY – это расширение для колбы, которая добавляет поддержку для SQLALCHEMY.

FLASK_MARSHMALLA – это интеграционный слой для колба и зефира (библиотека сериализации/дезерриализации объекта), которые добавляют дополнительные функции для зефира.

Marshmallow-Sqlalchemy – это добавляет дополнительные функции для зефира.

PSYCOPG – это адаптер PostgreSQL для языка программирования Python.

Шаг 1: Установите все зависимости:

С вашего терминала убедитесь, что вы находитесь в корневой папке проекта, затем запустите команду ниже:

$ pip install -r requirements.txt

Это загрузится и устанавливает все расширения в требованиях .txt.

Шаг 2: Настройка конфигурации

Добавьте следующий код в config.py:

Импорт ОС.

basedir = os.path.abspath(os.path.dirname(__file__))
SQLALCHEMY_ECHO = False
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_DATABASE_URI = "postgresql://username:password@localhost/database_name"

Здесь мы определили некоторую конфигурацию, которую будет использоваться API. Мы также используем базу данных PostgreSQL. Если вы предпочитаете другие базы данных, вам просто нужно соответственно изменять значение.

Пример: если вы хотите использовать SQLite, вы должны изменить эту строку как:

Sqlalchemy_database_uri.

Убедитесь, что вы измените вышеуказанные настройки с соответствующими значениями для вашей конфигурации. Измените имя пользователя и пароль в правильные учетные данные базы данных.

Шаг 3: Создайте точки входа API

from flask import Blueprint
from flask_restful import Api
from resources.Hello import Hello

api_bp = Blueprint('api', __name__)
api = Api(api_bp)

# Route
api.add_resource(Hello, '/Hello')

Здесь мы импортировали план с колбы, а также API от Flock_resful. Imported API добавит некоторые функциональные возможности в колбе, которая поможет нам добавлять маршруты и упростить некоторые процессы.

API_BP (‘API’, Имя ) – создает план, который мы зарегистрируем в приложение позже.

API.ADD_RESORCE (HELLO, ‘/HELLO ») – создает маршрут -/привет. Add_Resource принимает два параметра – Hello и/Hello, где Hello – это класс, который мы импортировали, и/hello – это маршрут, который мы определили для этого ресурса.

Теперь давайте создадим Hello Class, который мы упомянули выше. Добавьте следующий код в – Ресурсы/Hello.py:

from flask_restful import Resource


class Hello(Resource):
    def get(self):
        return {"message": "Hello, World!"}

В Hello Class мы определили функцию – получите. Это означает, что любой запрос на получение в конечной точке/Hello будет ударить эту функцию.

Поэтому, если вам нужен метод пост, у вас будет что-то вроде:

def post(self):
        return {"message": "Hello, World!"}

Наконец, добавьте следующий код в run.py:

from flask import Flask

def create_app(config_filename):
    app = Flask(__name__)
    app.config.from_object(config_filename)
    
    from app import api_bp
    app.register_blueprint(api_bp, url_prefix='/api')

    from Model import db
    db.init_app(app)

    return app


if __name__ == "__main__":
    app = create_app("config")
    app.run(debug=True)

Шаг 4: Запуск сервера

С вашего терминала убедитесь, что вы находитесь в корневой папке приложения, затем запустите эту команду:

$ Python Run.py.

Если в этот момент все идет нормально, вы должны иметь вывод, как показано ниже:

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 136-695-873

Теперь посетите URL (http://127.0.0.1:5000/api/hello), вы должны увидеть вывод как ниже:

{
    "hello": "world"
}

Потрясающие! 😄.

Шаг 5: Создание моделей.

Далее рядом есть наши модели. Flask предоставляет разработчикам с мощностью и гибкостью SQL Alchemy ORM для управления и запроса данных приложения. ORM означает реляционный Mapper Object, это инструмент, который позволяет разработчикам хранить и получать данные с использованием объектных ориентированных подходов и решает несоответствие объекта-реляционного сопротивления.

Кроме того, Flask-SQLALCHEMY – это расширение, которое обеспечивает поддержку SQLALCHEMY ORM в рамках колбы.

В файле – Model.py добавьте следующий код:

from flask import Flask
from marshmallow import Schema, fields, pre_load, validate
from flask_marshmallow import Marshmallow
from flask_sqlalchemy import SQLAlchemy


ma = Marshmallow()
db = SQLAlchemy()


class Comment(db.Model):
    __tablename__ = 'comments'
    id = db.Column(db.Integer, primary_key=True)
    comment = db.Column(db.String(250), nullable=False)
    creation_date = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), nullable=False)
    category_id = db.Column(db.Integer, db.ForeignKey('categories.id', ondelete='CASCADE'), nullable=False)
    category = db.relationship('Category', backref=db.backref('comments', lazy='dynamic' ))

    def __init__(self, comment, category_id):
        self.comment = comment
        self.category_id = category_id


class Category(db.Model):
    __tablename__ = 'categories'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(150), unique=True, nullable=False)

    def __init__(self, name):
        self.name = name


class CategorySchema(ma.Schema):
    id = fields.Integer()
    name = fields.String(required=True)


class CommentSchema(ma.Schema):
    id = fields.Integer(dump_only=True)
    category_id = fields.Integer(required=True)
    comment = fields.String(required=True, validate=validate.Length(1))
    creation_date = fields.DateTime()
    

Здесь у нас есть две модели – комментарий и категории класс. Эти класс определяет нашу структуру таблицы. Табличное значение используется для объявления названия таблицы, связанного с этой моделью.

Мы также определили столбцы для нашего стола, используя, например:

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(150), unique=True, nullable=False)`

Идентификатор и имя являются столбцами для таблицы, а значение после структуры столбца. Вы можете прочитать больше на создании таблицы схема здесь

Движение, ChareSchema и Commentschema используются для проверки. Здесь мы определили некоторые правила (например,:). Вы можете прочитать больше здесь

Шаг 6: Бег миграции

from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from Model import db
from run import create_app

app = create_app('config')

migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)


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

В вышеуказанном коде мы создали команду для выполнения миграции из нашей командной строки.

Миграции миграции похожи на контроль версии для вашей базы данных, позволяя вашей команде легко изменить и поделиться схемы базы данных приложений. Если вам когда-либо приходилось рассказать товарищу по команде вручную добавить столбец в свою локальную схему базы данных, вы столкнулись с проблемой, которые решают миграции базы данных. В этом руководстве мы используем расширение колба – колбу мигрировать, чтобы достичь этого.

Запустите инициализацию миграции, используя команду init db следующим образом: $ python migrate.py db init

Создание каталога/Home/User/Desktop/Pylinone/Migrations … Готово создание каталога/Главная/Пользователь/Настольный/Пилинон/Миграции/Версии … Готово создание/home/user/desktop/pylinone/migrations/alembic.ini.. Готово генерируют/home/user/desktop/pylinone/migrations/readme … Готово генерируют/home/user/desktop/pylinone/migrations/env.py … Готово генерирую/Главная/Пользователь/Настольный/Пилиновой/миграции/миграции/script.py.mako … сделано, пожалуйста, отредактируйте настройки/подключения/регистрации в «/Home/user/desktop/pylinone/migrations/alembic.ini», прежде чем продолжить. Сценарий также создал новую подпапку миграции в папке с подпапкой версий и многие другие файлы.

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

Запустите миграцию:

$ python migrate.py db мигрирует

Информация [alembic.runtime.migration] контекст. Info [alembic.runtime.migration] будет принимать несущественную DDL. Info [alembic.autogenate.compare] Обнаружена Добавлена информация о таблице «Категория» [alembic.autogenate.compare] Обнаружена добавленная таблица «Комментарий», генерирующих/home/user/desktop/pylinone/migration/versions/015c8b601C6b_.py … сделано Примените миграцию в базу данных. Запустить

Запустите команду обновления:

Python Migrate.py DB обновление

Информация [alembic.runtime.migration] контекст. Info [alembic.runtime.migration] будет принимать несущественную DDL. Info [alembic.runtime.migration] Бег обновления -> 015C8B601C6B, пустое сообщение Каждый раз, когда модели базы данных изменяют повторяющиеся команды migrate и обновлений.

Шаг 7: Добавление ресурсов категории Создайте новые файловые ресурсы/категории. Это позаботится обо всех категории, связанной с логикой. Добавьте код ниже на ресурсы/категории .py:

От запроса на импорт флэки из Flaks_restful Import Resource из модели импорта DB, категории, категорииSchema

Категории_schema (Многие = правда) ()

Class CationalResource (Ресурс): Def Get (Self): .Query.all () .Dump (категории) .data return {«Состояние»: «Успех», «Данные»: Категории}, 200 Здесь мы создали Get Способ получения категорий. Теперь у нас есть новая конечная точка – http://127.0.0.1:5000/api/category.

Используя Catehy.Query.all (), мы выделили все категории в базе данных и используем категории_schema.dump (категории) .data, мы десериализировали данные, выявленные.

Далее давайте добавим метод пост для создания новой категории. Добавьте следующий код в ресурсы/категории .py:

… Def Post (Self): .get_json (force = true), если не json_data: return {‘message’: «Нет входных данных, предоставленных»}, 400 # Validate и Deserialize Data, .load (json_data), если ошибки: Возврат ошибок, 422 .Query.Filter_by (name = data [‘name’]). Первый (), если категория: return {‘message’: ‘категория уже существует’}, 400 ([‘Имя’]))

    db.session.add(category)
    db.session.commit()

    result = category_schema.dump(category).data

    return { "status": 'success', 'data': result }, 201

Далее давайте добавим метод PUT для обновления категории. Обновлять ресурсы/категорию .py, как показано ниже:

… Def Put (Self): .get_json (force = true), если не json_data: return {‘message’: «Нет входных данных»}, 400 # Validate и Deserizize входных данных, .load (json_data), если ошибки: Возврат ошибок, 422 .Query.filter_by (ID = данные [‘ID’]). Первый () Если нет категории: return {‘Message’: ‘категория не существует’}, 400 [«Имя»] DB.Session. совершить()

    result = category_schema.dump(category).data

    return { "status": 'success', 'data': result }, 204

Наконец, давайте добавим метод удаления для удаления категории. Добавьте следующий код в ресурсы/категории .py:

… def Удалить (Self): .get_json (force = true), если не json_data: return {‘message’: «Нет входных данных»}, 400 # Validate и Deserialize Data, .load (json_data), если ошибки: Возврат ошибок, 422 .Query.filter_by (ID = данные [‘ID’]). Удалить () db.session.commit ()

    result = category_schema.dump(category).data

    return { "status": 'success', 'data': result}, 204

Наконец, импортируйте эти ресурсы в App.py. Обновите app.py точно так же, как показано ниже:

Flask Import FlightPrint от Flaks_restful Import API из Ressional.hello Импорт Здравствуйте.

API_BP (‘API’, Имя ) (API_BP)

API.ADD_RESORCE (HELLO, ‘/HELLO’) API.ADD_RESORCE (CateRationSource, ‘/категория’) в категории Ресурсы, мы создаем 4 конечных точка:

Get – http://127.0.0.1:5000/api/category.

Пост – http://127.0.0.1:5000/api/category.

Поместите – http://127.0.0.1:5000/api/category

Удалить – http://127.0.0.1:5000/api/category.

Шаг 8: Добавление ресурсов комментариев Создайте новые файловые ресурсы/Comment.py. Это позаботится обо всех комментариях, связанных с логикой.

От флэкса Импорт jsonify, запрос с Flaks_restful Импорт ресурс из модели импорта DB, комментарий, категории, Commentschema

Комментарии_schema (Многие = True) ()

Class CommentReource (ресурс): Def Get (Self): .Query.all () .dump (комментарии) .data return {“Статус”: «Успех», «Данные»: Комментарии}, 200

def post(self):
    json_data = request.get_json(force=True)
    if not json_data:
           return {'message': 'No input data provided'}, 400
    # Validate and deserialize input
    data, errors = comment_schema.load(json_data)
    if errors:
        return {"status": "error", "data": errors}, 422
    category_id = Category.query.filter_by(id=data['category_id']).first()
    if not category_id:
        return {'status': 'error', 'message': 'comment category not found'}, 4

API.ADD_RESORCE (HELLO, ‘/HELLO’) API.ADD_RESORCE (COMERTYRESOURCE, ‘/COTARY’) API.ADD_RESORCE (CommentReSource, ‘/Comment’) Шаг 9: Проверить enpoints У нас теперь есть следующие конечные точки:

Post – http://127.0.0.1:5000/api/category – для добавления категорий.