此练习旨在让您以交互式方式熟悉基本的后端/服务器端编程,并让您在现代的Python/Flask环境中舒适地开发。
阅读以下内容将有助于您在开发API/写作服务器端代码以及它如何适合较大的Web应用程序的上下文时了解全局:
该项目将分为多个部分。完成此项目后,必须按照以下说明提交。
这项练习应在9月17日星期一11:59 PM之前到期。如果您总共花费了10个多小时,包括您在React-thecercise的工作,请提交您拥有的东西!
如有任何疑问,请随时发送电子邮件至[email protected]。
Mac和Windows的安装说明。
python上任何东西的另一个不错的资源,包括安装,是Hitchhiker的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程序的影响或影响。因此,您能够运行同一软件包甚至不同版本的不同版本。
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 。为了向您的服务器提出请求,请使用Postman。
首先,向/端点GET请求。由于服务器正在localhost:5000上运行,因此完整的端点URL为localhost:5000/ 。

尝试调用/mirror端点。首先,查看端点的代码,以查看如何指定URL参数。然后向localhost:5000/mirror/<name> :

这些练习将引导您通过使用烧瓶创建一个静止的API!我们不希望您经历设置数据库实例的所有麻烦,因此我们创建了虚拟数据和模拟数据库界面来与之交互。为了轻松起见,整个应用程序逻辑减去app.py中实现的MOCKDB逻辑。对于较大的项目,API端点通常会分为称为views的不同文件。
在开始之前,请仔细看看create_response功能及其工作原理。确保您遵循有关如何使用此功能的准则,否则您的API将不会遵循适当的约定!
还要查看模拟数据库。最初的虚拟数据是在mockdb/dummy_data.py中定义的。启动服务器时,这就是“数据库”中的“存在”。
在mockdb/mockdb_interface.py中定义的函数是您可以查询MOCKDB的方式。在您将编写API的app.py中,这已被输入名称db 。因此,当您为端点编写代码时,您可以调用db.get('users')之类的db接口函数。
修改代码时,服务器将自动更新,除非您的代码不编译,否则服务器将停止运行,并且在修复代码后必须手动重新启动它。
定义端点:
GET /users
这应该返回正确格式的JSON响应,其中包含MOCKDB中所有user s的列表。如果您在启动服务器后立即致电此端点,则应在Postman中获得此响应:
{
"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的用户,请返回带有描述性message的404 。
通过添加基于他们所在的团队查询用户查询用户的能力来扩展第一个/users 。您不应像第2部分中的URL参数一样使用URL参数。而不是使用查询字符串。
如果将team作为查询字符串参数提供,则仅返回该团队中的用户。如果提供的team中没有用户,请返回一个空列表。
对于此练习,您可以忽略除team以外的任何查询字符串参数。
在Postman中,您可以提供查询字符串参数,将查询字符串写入您的请求URL,或者通过键入Send旁边的Params按钮。这样做将自动填写请求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
此端点应该创建一个新用户。每个请求还应在请求的body中发送name , age和team参数。 id属性将在MOCKDB中自动创建。
成功的请求应返回201的状态代码,并返回新创建的用户。
如果未提供三个必需的参数中的任何一个,请不要在数据库中创建新用户,并返回带有有用message的422 。通常,您的消息应为用户/开发人员提供有关他们做错了什么以及如何修复它的有用反馈。
这就是您可以从Postman发送body参数的方式。确保您不会将其误认为是查询参数! 
定义端点:
PUT /users/<id>
在这里,我们需要提供用户的id ,因为我们需要指定要更新的用户。该请求的body应包含与第4部分的POST请求相同的属性。
但是,此PUT请求的区别在于,只有带有提供的键( name , age , team )的值,并且未提供的任何参数不会更改所更新用户中的相应属性。
您不需要考虑没有name , age或team body参数。
如果找不到带有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测试框架,该框架自动找到并运行以test开头的Python方法,例如test_get_index 。在我们的情况下,我们有一个名为test_app.py的测试文件,该文件保留了第1-3部分的所有测试。
每种方法还接受client对象,该对象会自动由Pytest注入。 client是一个测试固定装置,您可以在多个测试中使用它,为您的测试提供了固定的基线。初始化时,pytest会查看conftest.py并收集所有固定装置。在我们的情况下,我们有一个client固定装置,该固定装置为烧瓶测试客户端提供,我们可以用来轻松测试我们的API。查看如何使用烧瓶测试客户端进行其他类型的请求以及如何使用请求有效负载。
完成所有步骤后,将更改推向GitHub存储库!
在提交之前,让我们运行Black,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],并带有指向您的分叉存储库和分支名称的链接。我们将需要这两件事来查看您的提交。