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()decoratorhello()/hello(){'hello': 'world'}Flaskapp.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不带符号的代码即可+。
这里我们导入了jsonifyfrom flask,用于将movies列表转换为正确的JSON值。
 注意,我们还将 API 端点从 重命名为/。/movies所以
 ,现在我们的 API 应该可以通过 访问了。http://localhost:5000/movies
要查看更改,请重新启动Flask服务器。
为了使用我们的 API,我们将使用Postman。Postman 用于测试使用不同 HTTP 方法的 API。例如,使用POSTrequest 向 Web 服务器发送数据、使用 request 更新服务器中的数据PUT、使用 request 从服务器获取数据GET以及使用DELETErequest 删除数据。
在此处了解有关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>PUTJSON
使用 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 后端开发教程 - Java、Spring Boot 实战 - msg200.com
            后端开发教程 - Java、Spring Boot 实战 - msg200.com
           
  
