Каждый язык программирования имеет фреймворки для создания веб-сервера, также известный как веб-каркас. В Python есть несколько таких, как Django, бутылка, пирамида, казонит, фастапи, Web2Py и многие другие. Рядом с Джанго самая тяжелая используемая веб-каркас Python – это колба. Flask – это экспресс (минималистский веб-каркас), что Django – рубин на рельсах (батареи включали веб-каркас).
В этом руководстве мы будем строить базовый JSON API в колбе. После этого я делюсь ресурсами для глубже в использовании колбу.
Предпосылки:
Python установлен (я использую 3.8.5)
IDE (я использую Visual Studio Code)
Настраивать
Создать пустую папку для работы
Откройте терминал в этой папке
Создать виртуальную среду Python
Python -M VINV VINV
Включите виртуальную среду
Источник ./венв/Bin/Activate
(Обратите внимание на изменение вашей терминальной подсказки)
Если не знаком с тем, что есть и какова цель виртуальной среды, прочитайте следующие статьи
Часть I: Virtualenv & Pyenv Часть II: Встроенный виртуальный Env Generator Часть III: Pipenv, окончательная виртуальная среда
- Установить колбу
PIP Установите колбу
Наш первый маршрут
- Создайте файл под названием Server.py
# Import the flask library from flask import Flask # create the flask application object pa app = Flask(__name__) ## Decorator making the subsequent function a route @app.route("/", methods=["GET"]) ## this functions return value is the response of the route (function name doesn't matter) def first_route(): return "hello world", 200 ## will return text with a 200 status
* * Если ваше интересно о Имя Переменная, это специальная переменная в Python, которую вы можете Читайте о здесь **
Чтобы запустить сервер, используйте команду
Flask_app = server.py python -m flask run
Flak_app = server.py
Это определяет переменную FLASK_APP ENV, необходимую для определения того, какой файл имеет объект приложения для запуска Flask.Python -m
Позволяет запустить модуль Python или файл в виде скриптаКолбу
У нас работают модуль колбаБеги
RUN – это команда, встроенная в модуль Flask, чтобы создать веб-сервер с приложением, указанным переменной FLASK_APP
После того, как сервер запущен в локальный хост: 5000, и вы должны увидеть HellowOrld! Поздравляю, вы создали свой первый флаговой маршрут!
Основы JSON API
Возвращая ответы JSON в колбе довольно легко, до тех пор, пока функция маршрутов возвращает словарь Python, он может превратиться в JSON. Для любых экземпляров классов Python вы можете либо преобразовать их в словарь, добавив встроенный метод AS_DICT.
class Dog(): ## Dog Constructor def __init__(self, name, age): self.name = name self.age = age ## Method for Turning to Dictionary to send back as JSON def as_dict(self): return {c.name: getattr(self, c.name) for c in self.__table__.columns} ## Create Instance of Dog sparky = Dog("Sparky", 5) ## Print Dog as a Dictionary print(Dog.as_dict())
Основной труд
Мы будем использовать базовый список/массив еды внутри словаря, чтобы создать простое API для добавления, редактирования, удаления приема пищи в массиве. Добавьте следующее на Server.py.
- Обратите внимание, что добавили запрос в импорт колбы, это позволяет нам тянуть данные из запроса, такого как тело запроса и метод запроса
## List of Dictionaries containing meals meals = [{"meal": "breakfast"}, {"meal": "lunch"}, {"meal": "dinner"}] ## INDEX & CREATE ROUTE - Return all meals and create meals @app.route("/meals", methods=["GET", "POST"] ) def meals_index_create(): ## If a get request, return all meals if (request.method == "GET"): print(meals) return {"meals": meals} ## If a post, add a meal expecting a json body with a meal property if (request.method == "POST"): # get the request body as a python dictionary body = request.json # append the new meal to meals meals.append(body) # return new list of meals return {"meals": meals}
Если вы хотите запустить сервер и используйте инструмент, похожий на почтальон, чтобы сделать запрос GET и POST к/еды. Обязательно отправьте кузов JSON для запроса пост.
{ "meal":"brunch" }
Далее мы добавим шоу, удаление и обновление маршруты
Обратите внимание на
в сторону определения конечной точки. Это называется ARL PARAL и является способом определения переменной в самом URL. Затем мы можем получить эту переменную в качестве аргумента нашей функции маршрута (теперь обратите внимание, что функция имеет определенные параметры).Поскольку мы сделаем задания, используя имя переменного питания, без дополнительных деталей, Python подумает, что мы создаем новую «локальную» версию пищи, не редактирующие глобальную, определенную вне функции. Чтобы получить доступ к едам, мы будем использовать глобальное ключевое слово для объявления о том, что ссылки на питание в этой функции являются ссылки на ранее определенную глобальную переменную.
В разделе «Удалить» вы заметите какой-то странный синтаксис, это называется списком понимания словаря. По сути, это способ создания нового списка/DICK, зацикливающую над другим. Читать далее… Понимание списка – Словарь понимание
## SHOW, Update, and Delete routes - Get one, update one, delete one @app.route("/meals/", methods=["GET", "PUT", "DELETE"]) def meals_show_update_delete(index): # save the contents of the request body body = request.json # make sure that meals refers to the global variable before reassignment global meals # make sure that the index is a integer, not a string index = int(index) if(request.method == "GET"): # return the meal at the index specified in the url param return meals[index] if(request.method == "PUT"): #update the specified index with the request body, then return it meals[index] = body return meals[index] if(request.method == "DELETE"): ## make meals a new dictionary, where the meals list has the desired item removed using the list comprehension feature (creating a list or dict by iterating over another one with an expression) meals = { "meals":[i for i in meals if not (i["meal"] == meals[index]["meal"])] } return meals
Там у вас полный груз на еде, захватывающие!
Что дальше
- Прочитайте флаговые документы
- Узнайте, как использовать Mongodb с колбой
- Используйте базы данных SQL с использованием SQLALCHEMY
Оригинал: “https://dev.to/alexmercedcoder/python-flask-101-intro-and-api-building-3b88”