Это упражнение предназначено для того, чтобы вы знакомились с фундаментальным программированием на стороне бэкэнд/сервера интерактивным образом, а также для того, чтобы вам было удобно развиваться в современной среде Python/Flask.
Чтение следующего поможет вам понять общую картину, когда дело доходит до разработки API/кода на стороне сервера, а также в том, как оно подходит в контексте более крупного веб -приложения:
Этот проект будет разбит на несколько частей. После того, как вы закончите этот проект, вы должны отправить его, следуя приведенным ниже инструкциям.
Это упражнение должно состояться до этого понедельника, 17 сентября, в 23:59. Если вы потратили более 10 часов, включая свою работу с React-Excise, отправьте то, что у вас есть!
По любым вопросам, не стесняйтесь написать по электронной почте [email protected].
Инструкции по установке для Mac и Windows.
Еще одним отличным ресурсом для чего -либо на Python, включая установку, является руководство автостопом по Python.
Проверьте, есть ли у вас правильные версии, запустив следующие команды в вашем терминале:
python3 -V
pip3 -V
pipenv --version
Во -первых, разветвляется этот репозиторий. Кнопка вилки в вашем правом верхнем углу. То, что это делает, копирует этот репозиторий в ваш аккаунт. Теперь у вас должен быть репозиторий с именем <yourusername>/flask-exercise .
Это должно выглядеть так (мое имя пользователя - TKO22): 
Затем клонируйте этот репозиторий (нажмите кнопку «Зеленая», говоря «клон или скачать», выберите HTTP, скопируйте и вставьте ее в местоположение <url> ) и перейдите в него:
$ git clone <url>
$ cd flask-exercise
Затем установите свою виртуальную среду и установите зависимости Python, необходимые для запуска этого приложения. Мы используем Pipenv, который автоматически устанавливает все, учитывая Pipfile и Pipfile.lock. Pipfile использует VirtualEnv, которая представляет собой виртуальную среду Python, изолированную от других проектов Python, неспособных вмешиваться или затронуть другие программы Python на той же машине. Таким образом, вы способны запускать разные версии одного и того же пакета или даже разных версий Python.
pipenv install --skip-lock
Вы должны быть в этой виртуальной среде, чтобы запустить этот сервер. Для этого:
pipenv shell
Затем, чтобы запустить запуск сервера:
(backend-exercise-o4dc6oDL)$ python app.py
Примечание. Это останется процессом работы в вашем терминале, поэтому вам нужно будет открыть новую вкладку или окно, чтобы выполнить другие команды.
Чтобы остановить сервер, нажмите Control-C .
Чтобы выйти из вашей виртуальной среды, которая называется backend-exercise-[something here] , запустите:
(backend-exercise-o4dc6oDL)$ deactivate
Вы также можете добавить pipenv run перед любой командой вместо того, чтобы запустить pipenv shell . например pipenv run python app.py
Прежде чем внести какие -либо изменения в код, обязательно создайте новую филиал. Обычно филиалы называются на основе адреса функции или ошибки.
git checkout -b <YOUR_NAME>
Имена ветвей должны быть все строчные и не могут содержать пространства. Вместо пробелов используйте дефисы. Например:
git checkout -b varun-munjeti
Запуск сервера сделает его непрерывно запущенным процессом на localhost:5000 . Чтобы сделать запросы на ваш сервер, используйте почтальон.
Во -первых, сделайте запрос GET в / конечную точку. Поскольку сервер работает на localhost:5000 , полный URL -адрес конечной точки является localhost:5000/ .

Попробуйте позвонить в конечную точку /mirror . Во -первых, посмотрите на код для конечной точки, чтобы увидеть, как вы можете указать параметры URL. Затем сделайте запрос на почтальон в localhost:5000/mirror/<name> :

Эти упражнения проведут вас через создание API RESTFUL с помощью колбы! Мы не хотим, чтобы вы проходили через все проблемы настройки экземпляра базы данных, поэтому мы создали фиктивные данные и макетный интерфейс базы данных для взаимодействия с ним. Для легкого, вся логика приложений за вычетом логики MockDB будет реализована в app.py Для более крупных проектов конечные точки API обычно будут разделены на различные файлы, называемые views .
Прежде чем начать, внимательно посмотрите на функцию create_response и то, как она работает. Убедитесь, что вы следовали рекомендациям для использования этой функции, в противном случае ваш API не будет следовать надлежащим соглашениям!
Также посмотрите в макет базу данных. Начальные фиктивные данные определяются в mockdb/dummy_data.py . Это то, что «существует» в «базе данных», когда вы запустите сервер.
Функции, определенные в mockdb/mockdb_interface.py - это то, как вы можете запросить MockDB. В app.py , где вы будете писать свой API, это было импортировано с именем db . Поэтому, когда вы пишете код для ваших конечных точек, вы можете вызвать функции интерфейса DB, такие как db.get('users') .
Когда вы изменяете свой код, сервер автоматически обновляется, если ваш код не компилируется, и в этом случае сервер прекратит работать, и вам придется вручную перезапустить его после исправления кода.
Определите конечную точку:
GET /users
Это должно вернуть правильно отформатированный ответ JSON, который содержит список всех user в MockDB. Если вы позвоните по этой конечной точке сразу после запуска сервера, вы должны получить этот ответ в почте:
{
"code": 200,
"message": "",
"result": {
"users": [
{
"age": 19,
"id": 1,
"name": "Aria",
"team": "LWB"
},
{
"age": 20,
"id": 2,
"name": "Tim",
"team": "LWB"
},
{
"age": 23,
"id": 3,
"name": "Varun",
"team": "NNB"
},
{
"age": 24,
"id": 4,
"name": "Alex",
"team": "C2TC"
}
]
},
"success": true
}
Определите конечную точку:
GET /users/<id>
Это должно получить одного пользователя, у которого есть id , предоставленный из запроса.
Если нет пользователя с предоставленным id , верните 404 с описательным message .
Расширить первые /users , добавив возможность запросить пользователей на основе команды, в которой они находятся. Вы не должны использовать параметр URL, как в части 2. Вместо этого используйте строку запроса.
Если team предоставляется как параметр строки запроса, верните только пользователей, которые находятся в этой команде. Если в предоставленной team нет пользователей, верните пустой список.
Для этого упражнения вы можете игнорировать любые параметры строки запроса, кроме team .
В Postman вы можете предоставить параметры строки запроса, записывающие строку запроса в URL -адрес вашего запроса или нажав кнопку Params рядом с Send . Это автоматически заполнит URL -адрес запроса.
Должно произойти следующее
GET /users?team=LWB
{
"code": 200,
"message": "",
"result": {
"users": [{
"age": 19,
"id": 1,
"name": "Aria",
"team": "LWB"
}, {
"age": 20,
"id": 2,
"name": "Tim",
"team": "LWB"
}]
},
"success": true
}

Определите конечную точку:
POST /users
Эта конечная точка должна создать нового пользователя. Каждый запрос должен также отправлять name , age и параметр team в body запроса. Свойство id будет создано автоматически в MockDB.
Успешный запрос должен вернуть код состояния 201 и вернуть недавно созданного пользователя.
Если какой -либо из трех необходимых параметров не предоставлен, не создавайте нового пользователя в БД и возвращайте 422 с полезным message . В целом, ваши сообщения должны предоставить пользователю/разработчику полезные отзывы о том, что они сделали неправильно и как они могут это исправить.
Вот как вы можете отправить параметры body от почтальона. Убедитесь, что вы не ошибаетесь за параметры запроса! 
Определите конечную точку:
PUT /users/<id>
Здесь нам нужно предоставить id пользователя, поскольку нам нужно указать, какой пользователь обновляет. body для этого запроса должно содержать те же атрибуты, что и запрос POST из части 4.
Тем не менее, разница в этом запросе PUT заключается в том, что только значения с предоставленными ключами ( name , age , team ) будут обновлены, и любые предоставленные параметры не будут изменять соответствующий атрибут в обновлении пользователя.
Вам не нужно body при условии, что они не являются name , age или team .
Если пользователь с предоставленным id не может быть найден, верните 404 и полезное message .
Определите конечную точку:
DELETE /users/<id>
Это удалит пользователя с соответствующим id . Верните полезное message , хотя ничего не должно быть указано в result ответа.
Если пользователь с предоставленным id не может быть найден, верните 404 и полезное message .
Давайте напишем модульные тесты! Модульные тесты очень важны для разработки программного обеспечения. Он позволяет автоматически проверять, работает ли наша функциональность или нет, поскольку вручную тестирование, все очень медленное и склонно к ошибкам. Разработка испытаний - это процесс разработки программного обеспечения, в котором мы определяем спецификацию, записываем тесты на эту спецификацию, затем реализуем функциональность и используем тесты, чтобы подтвердить, работает ли она. Мы сделали немного об этом для вас, так как написаны тесты на часть 1-3. Чтобы проверить их:
pipenv install --dev
pipenv run pytest
Если ваши изменения сработали, вы должны увидеть зеленую линию, в которой говорилось, что 5 passed . Если они этого не делают, следуйте по следам стека и исправьте свою реализацию. Как только они работают, давайте напишем тесты для частей 3-6 .
Мы используем Pytest, полезную структуру тестирования Python, которая автоматически находит и запускает методы Python, которые начинаются с test , таких как test_get_index . В нашем случае у нас есть тестовый файл с именем test_app.py , который проведет все тесты для частей 1-3.
Каждый метод также принимает client -объект, который автоматически вводится Pytest. client - это тестовый прибор, который вы можете использовать в нескольких тестах, что дает вам фиксированный базовый уровень для ваших тестов. При инициализации Pytest рассматривает conftest.py и собирает все светильники. В нашем случае у нас есть client -приспособление, которое дает тестовый клиент Flask, который мы можем использовать, чтобы легко проверить наш API. Посмотрите, как вы можете использовать тестовый клиент Flask для выполнения других типов запросов и как вы можете использовать полезную нагрузку запроса.
Когда вы закончите со всеми шагами, вставьте свои изменения в свой репо GitHub!
Давайте запустим черный, форматер Python, прежде чем отправить. Это устраняет все аргументы о том, как мы хотим стилизовать ваш код Python и дает рецензентам стандартизированный стиль для обзора. Вы должны установить его с pipenv install --dev
pipenv run black .
Прежде чем вы сможете отправить PR, вам придется подтолкнуть вашу ветку в удаленную ветку (та, которая находится на GitHub, а не локально).
Проверьте, что вы в своем филиале:
git branch
Если вы хотите убедиться, что все ваши коммиты находятся в:
git log
Нажмите Q , чтобы покинуть экран git log .
Толкните свои коммиты в вашу удаленную ветку:
git push
В первый раз, когда вы это сделаете, вы можете получить ошибку, так как ваша удаленная филиал еще не существует. Обычно это говорит вам правильную команду для использования:
git push --set-upstream origin <YOUR_BRANCH_NAME>
Примечание: это должно быть сделано только в первый раз, когда вы продвигаете новую ветку. Вы можете использовать только git push впоследствии.
Как только это будет сделано, отправьте электронное письмо по адресу [email protected] по ссылке на ваш раздвоенный репозиторий и название вашего филиала. Нам понадобятся эти две вещи, чтобы просмотреть ваше представление.