Автор оригинала: 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 – для добавления категорий.