下面我详细讲解一下“Python编程在flask中模拟进行Restful的CRUD操作”的攻略及两个示例。
入门
首先,需要安装好 Python 和 Flask。你可以在官方文档中找到相应的安装指南:
安装好之后,我们就可以开始了。
搭建项目
首先,创建一个包含 Flask 和相应依赖项的虚拟环境。可以使用 venv
模块创建一个新的虚拟环境。
然后,在虚拟环境中使用以下命令安装所需依赖:
pip install flask flask-restful
接下来,我们创建一个名为 app.py
的文件作为我们的主 Flask 应用程序。在这个文件中,我们引入 Flask 和 Flask-Restful 模块,并创建一个名为 app
的 Flask 实例:
from flask import Flask
from flask_restful import Api
app = Flask(__name__)
api = Api(app)
if __name__ == '__main__':
app.run(debug=True)
这个应用程序还没有做什么事情,但它已经能够在本地启动。运行以下命令:
python app.py
这将启动 Flask 开发服务器。
现在,我们来添加我们的第一个资源。
添加资源
我们需要定义一个数据模型来表示我们的资源。为了简单起见,我们用一个 Python 字典来表示一个博客文章:
blog_posts = {
1: {'title': 'First Post', 'body': 'This is my first post.'},
2: {'title': 'Second Post', 'body': 'This is my second post.'},
3: {'title': 'Third Post', 'body': 'This is my third post.'}
}
有了数据模型,我们可以定义一个资源类,用来处理我们的请求。在 Flask-Restful 中,每个资源类都必须扩展自 flask_restful.Resource
类,并实现我们所需要的一些方法。为了对博客文章进行 CRUD 操作,我们需要实现 GET、POST、PUT 和 DELETE 方法。
下面是我们的示例代码,你可以添加到 app.py
中:
from flask_restful import Resource, reqparse
parser = reqparse.RequestParser()
parser.add_argument('title', type=str, help='Title of blog post')
parser.add_argument('body', type=str, help='Body of blog post')
class BlogPost(Resource):
def get(self, post_id):
return blog_posts[post_id]
def delete(self, post_id):
del blog_posts[post_id]
return '', 204
def put(self, post_id):
args = parser.parse_args()
blog_posts[post_id] = {'title': args['title'], 'body': args['body']}
return blog_posts[post_id], 201
class BlogPosts(Resource):
def get(self):
return blog_posts
def post(self):
args = parser.parse_args()
post_id = len(blog_posts) + 1
blog_posts[post_id] = {'title': args['title'], 'body': args['body']}
return blog_posts[post_id], 201
api.add_resource(BlogPosts, '/posts')
api.add_resource(BlogPost, '/posts/<int:post_id>')
这段代码中,我们首先定义了包含 title
和 body
参数的请求解析器。这允许我们从请求中提取参数。随后,我们定义了两个资源类:BlogPosts
和 BlogPost
。BlogPosts
用于处理多个博客文章的请求,而 BlogPost
用于处理单个博客文章的请求。
BlogPosts
类定义了 GET 和 POST 方法。GET 方法返回所有的博客文章列表,POST 方法创建一个新的博客文章,将其添加到列表中,并返回新创建的文章。
BlogPost
类定义了 GET、PUT 和 DELETE 方法。GET 方法返回特定的博客文章,PUT 方法更新特定的博客文章,而 DELETE 方法删除特定的博客文章。我们通过请求解析器从 PUT 请求中提取 title
和 body
参数,并将其保存到博客文章中。DELETE 方法只需删除博客文章字典中的元素并返回一个 HTTP 状态码 204。
我们在资源类中通过装饰器 @api.resource()
将资源路由到 API 中。在我们的示例代码中,我们将 BlogPost
类路由到 "/posts/BlogPosts
类路由到 "/posts" URI。
示例1:使用 Postman 测试
为了使用 Postman 测试我们的 API,我们需要在 Postman 中创建一个新的请求。选择 GET 方法和 URL "http://localhost:5000/posts",并单击发送。我们将获得保存在 blog_posts 字典中的所有博客文章数据。
现在,创建一个名为 "First Post" 的新博客文章,发送一个 POST 请求,URL 为 "http://localhost:5000/posts",请求体为 JSON 格式:
{
"title": "First Post",
"body": "This is my first post on Flask RESTful API"
}
查看响应,你将看到我们新创建的博客文章数据。
接下来,使用 PUT 方法将该文章更新为:
{
"title": "First Post Updated",
"body": "This is my first post on Flask RESTful API, updated version"
}
通过发送 PUT 请求嘿过程中的响应体,你应该会看到已更新的文章数据。
最后,通过DELETE 方法删除该文章:
DELETE http://localhost:5000/posts/1
发送 DELETE 请求后,该文章应该已经被成功删除。
示例2:调用 API
如果需要在你的应用程序中调用 API,可以使用 Python 的 requests
模块。以下代码演示了如何使用 requests
调用我们的 API:
import requests
url = 'http://localhost:5000/posts/1'
headers = {'content-type': 'application/json'}
data = {'title': 'First Post Updated From API',
'body': 'This is my first post on Flask RESTful API, updated from API'}
response = requests.put(url, json=data, headers=headers)
print(response.status_code)
print(response.json())
这段代码将通过 requests.put()
方法将更新数据发送到 API,并使用参数 json
来传递数据。我们在 headers
中指定了“Content-Type”为“application/json”,以确保 API 正确解析请求。使用 response.json()
解析响应,以获取程序返回的 JSON 格式的数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python编程在flask中模拟进行Restful的CRUD操作 - Python技术站