Flask Rest API -Part:0- 设置和基本 CRUD API
第 0 部分:设置和基本 CRUD API
你好!欢迎来到 Flask Rest API - 从零到尤达系列教程。我们将学习如何构建一个电影数据库,用户可以在其中添加、编辑、更新和删除Genre
、Movie
以及Casts
。首先,我们将从使用 和 的基本 API 结构入手,Flask
然后学习如何MongoDB
与应用程序集成。最后,我们将学习如何按照最佳实践,使用 和 进行最小设置来构建我们的 API Flask-RESTful
。然后,我们将继续使用Authentication
和Authorization
,测试和部署 Flask 应用程序。
我们将在本系列中学习什么?
- Flask——用于我们的网络服务器。
- flask-restful - 用于构建酷炫的 Rest-API。
- Pipenv用于管理python虚拟环境。
- mongoengine——用于管理我们的数据库。
- flask-marshmallow - 用于序列化用户请求。
- Postman - 用于测试我们的 API
- Flask-Bcrypt用于散列用户密码。
- Flask-JWT-Extended用于创建授权和身份验证的令牌。
为什么选择 Flask?
- 易于上手😊
- 非常适合构建 Rest API 和微服务。
- 被 Netflix、Reddit、Lyft 等大公司所采用。
- 非常适合构建机器学习应用程序的 API。
- 这个的力量很强大
这个系列适合哪些人?
- 具有 Python 基本知识并想要构建酷炫应用程序的初学者。
- 有使用过 Flask
SSR
(服务器端渲染)的经验丰富的 Flask 开发人员。
那么,让我们开始吧。
首先,创建一个新目录并浏览到新创建的目录,我将把它命名为movie-bag
。
mkdir movie-bag
cd movie-bag
首先pipenv
使用命令安装
pip install --user pipenv
Pipenv
用于创建一个virtual environment
隔离区,将您在该项目中使用的 Python 包与其他系统 Python 包隔离开来。这样,您就可以为不同的项目使用相同 Python 包的不同版本。
现在,让我们安装flask
使用pipenv
pipenv install flask
这将创建一个新的虚拟环境并安装 flask。此命令将创建两个文件Pipfile
和Pipfile.lock
。
#~ movie-bag/Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
flask = "*"
[requires]
python_version = "3.7"
Pipfile 包含应用程序所需的软件包。如您所见,flask
它已添加到[packages]
列表中。这意味着,当有人下载您的代码并运行它时pipenv install
,flask
它就会安装在他们的系统中。很棒,对吧?
如果您熟悉requirements.txt
,请将其Pipfile
视为类requirements.txt
固醇。
Flask 非常简单,你只需一个文件就能创建一个 API。(但你不必这么做😅)
创建一个名为“app.py
我们将在其中编写 Flask Hello World API”的新文件。在其中写入以下代码app.py
#~movie-bag/app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return {'hello': 'world'}
app.run()
让我们理解一下我们刚刚写的内容。首先,我们Flask
从flask
包中导入了该类。
然后我们用 定义一个根端点,称为@app.route('/')
,它基本上接受函数扩展其行为,以便在请求端点时调用它。并返回,最后服务器启动@app.route()
decorator
hello()
/
hello()
{'hello': 'world'}
Flask
app.run()
想了解更多关于装饰器的知识?阅读这篇精彩的文章
好了,你已经创建了自己的第一个 Flask API(拍拍你的后背)。
Flask
要运行该应用程序,首先,启用您在安装时创建的虚拟环境
pipenv shell
现在使用以下命令运行该应用程序,
python app.py
输出如下所示:
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
如您所见,该应用程序正在 上运行http://127.0.0.1:5000/
。在您选择的浏览器中输入 URL,然后查看JSON
服务器的响应。
注意:127.0.0.1 的别名是 localhost,因此您也可以通过 http:localhost:5000 访问您的 API
现在让我们更新app.py
以获得更多乐趣😉
#~/movie-bag/app.py
-from flask import Flask
+from flask import Flask, jsonify
app = Flask(__name__)
+movies = [
+ {
+ "name": "The Shawshank Redemption",
+ "casts": ["Tim Robbins", "Morgan Freeman", "Bob Gunton", "William Sadler"],
+ "genres": ["Drama"]
+ },
+ {
+ "name": "The Godfather ",
+ "casts": ["Marlon Brando", "Al Pacino", "James Caan", "Diane Keaton"],
+ "genres": ["Crime", "Drama"]
+ }
+]
+
-@app.route('/')
+@app.route('/movies')
def hello():
- return {'hello': 'world'}
+ return jsonify(movies)
app.run()
注意: 在上面的代码片段中,-
(red
)表示先前代码中被删除的部分,+
(green
)表示替换它的代码。所以,如果你跟着我一起写代码,只需复制green
不带符号的代码即可+
。
这里我们导入了jsonify
from flask
,用于将movies
列表转换为正确的JSON
值。
注意,我们还将 API 端点从 重命名为/
。/movies
所以
,现在我们的 API 应该可以通过 访问了。http://localhost:5000/movies
要查看更改,请重新启动Flask
服务器。
为了使用我们的 API,我们将使用Postman
。Postman 用于测试使用不同 HTTP 方法的 API。例如,使用POST
request 向 Web 服务器发送数据、使用 request 更新服务器中的数据PUT
、使用 request 从服务器获取数据GET
以及使用DELETE
request 删除数据。
在此处了解有关REST API HTTP 方法的更多信息。
安装Postman以轻松测试您的 API 端点。
安装后Postman
,打开一个新标签并将GET
请求发送到您的服务器(http://localhost:5000)。
好的,现在我们准备添加新的 API 端点CRUD
(创建、更新、检索和删除)
app.py
在之前添加以下代码app.run()
#~movie-bag/app.py
-from flask import Flask, jsonify
+from flask import Flask, jsonify, request
app = Flask(__name__)
@@ -19,5 +19,21 @@ movies = [
def hello():
return jsonify(movies)
+@app.route('/movies', methods=['POST'])
+def add_movie():
+ movie = request.get_json()
+ movies.append(movie)
+ return {'id': len(movies)}, 200
+
+@app.route('/movies/<int:index>', methods=['PUT'])
+def update_movie(index):
+ movie = request.get_json()
+ movies[index] = movie
+ return jsonify(movies[index]), 200
+
+@app.route('/movies/<int:index>', methods=['DELETE'])
+def delete_movie(index):
+ movies.pop(index)
+ return 'None', 200
app.run()
如您所见,@app.route()
除了 API 端点之外,还可以接受一个参数。该参数methods
用于 API 端点。
我们刚刚添加了:
1)@app.route('/movies', methods=['POST'])
用于将新电影添加到movies
列表的端点。此端点接受POST
请求。POST
您可以使用请求向列表发送新电影。
使用 Postman 通过 POST 请求发送电影
POST
从下拉菜单中选择- 单击
Body
选项卡,然后单击raw
。 - 从下拉菜单中选择
JSON
(表示我们正在以 JSON 格式将数据发送到我们的服务器。) - 输入以下电影详情并点击
SEND
{
"name": "The Dark Knight",
"casts": ["Christian Bale", "Heath Ledger", "Aaron Eckhart", "Michael Caine"],
"genres": ["Action", "Crime", "Drama"]
}
使用 Postman 的 POST 请求响应
在响应中,您将获得最近添加的电影的 ID
{"id": 2}
- 现在再次发送请求并查看服务器响应的电影
GET
列表😊3
2)根据 的建议@app.route('/movies/<int:index>', methods=['PUT'])
,编辑列表中已存在的电影的端点。同样,对于请求,您也必须包含要更新的电影的正文。index
<int:index>
PUT
JSON
使用 Postman 的 PUT 请求响应
- 现在发送
GET
请求以查看您更新的电影是否确实在电影列表中更新。
3)@app.route('/movies/<int:index>', methods=['DELETE'])
用于从电影列表的指定索引中删除电影的 API 端点。使用 Postman 的 DELETE 请求响应
- 现在发送
GET
请求/movies
并查看电影是否已从movies
列表中删除。
我们从本系列的这一部分中学到了什么?
Flask
使用以下方式在新的虚拟环境中安装pipenv
- 创建一个简单的 hello world flask 应用程序
- 创建具有功能的 API 端点
CRUD
。
本系列文章的这一部分就到这里。你可以在这里
找到这部分的代码。
在本部分中,我们仅学习了如何将电影存储在 Python 列表中,但在本系列的下一部分中,我们将学习如何将Mongoengine
电影存储在真实的MongoDB
数据库中。
祝您编码愉快😊
鏂囩珷鏉ユ簮锛�https://dev.to/paurakhsharma/flask-rest-api-part-0-setup-basic-crud-api-4650