Flask 构成
1.路由(Routing):Flask 使用路由来定义 URL 和对应的处理函数。通过装饰器 @app.route(),可以将一个 URL 映射到相应的处理函数上,从而实现请求的路由和处理。
2.视图函数(View Functions):视图函数是 Flask 中处理请求的核心组件,它接收请求并返回响应。视图函数通常被装饰器绑定到特定的 URL 路由上。
3.请求上下文(Request Context):Flask 在处理请求时会创建一个请求上下文,其中包含了请求的信息,例如请求的方法、URL 参数、表单数据等。视图函数可以通过 request 对象来访问请求上下文中的数据。
4.响应对象(Response Object):视图函数需要返回一个响应对象,用于向客户端返回数据。Flask 提供了 make_response() 函数和 Response 类来构造响应对象,也可以直接返回字符串、模板渲染结果等。
5.模板引擎(Template Engine):Flask 默认使用 Jinja2 模板引擎来渲染 HTML 页面。模板引擎允许开发者在模板中嵌入动态内容,从而将数据和视图分离,使页面更加灵活和易于维护。
6.上下文全局变量(Context Globals):Flask 提供了一些上下文全局变量,例如 current_app 和 g,可以在视图函数中使用。current_app 表示当前应用的实例,g 是一个全局变量字典,可以在同一请求中共享数据。
7.扩展(Extensions):Flask 的功能可以通过扩展来增强,例如数据库支持、表单验证、用户认证等。Flask 社区提供了大量的扩展,使开发者能够更方便地添加功能。
8.蓝图(Blueprint):蓝图是一种将 Flask 应用分割为小模块的方式,可以将相关的路由和视图函数组织在一个蓝图中,使应用更加结构化和易于管理。
优势
1.简单易用:Flask 的设计理念是保持简单和直观,它的 API 非常易于学习和使用,使得开发者可以快速上手开发 Web 应用。
2.轻量级:Flask 是一个微型框架,提供了一些基本的功能,没有过多的依赖,因此加载速度快,适合构建小型和中小型的 Web 应用。
3.灵活可扩展:尽管 Flask 是轻量级的,但它允许开发者根据需要选择和添加扩展,以增加更多功能,例如数据库支持、表单验证、用户认证等。
4.RESTful 支持:Flask 提供了良好的支持来构建 RESTful 风格的 API,使开发者可以轻松地构建基于 Web 的服务端应用。
5.Jinja2 模板引擎:Flask 使用 Jinja2 模板引擎来渲染 HTML 页面,使页面构建更加灵活和易于维护。
(什么是Jinja:模板引擎)
6.开放性和活跃社区:Flask 是一个开源项目,有一个活跃的社区,拥有大量的第三方库和扩展可供选择,帮助开发者更快地构建功能丰富的 Web 应用。
劣势
1.功能有限:Flask 是一个微型框架,相对于一些全功能的 Web 框架,它提供的功能相对较少。对于复杂的大型 Web 应用,可能需要结合一些扩展或其他库来满足需求。
2.缺少内置功能:由于 Flask 是一个轻量级框架,它并不包含一些高级的功能,例如数据库迁移、用户认证等。这些功能需要使用扩展或手动实现。
3.依赖于扩展:为了增加功能,开发者需要依赖一些扩展,而不是直接内置在框架中。这在一定程度上增加了应用的复杂性,需要管理更多的依赖关系。
4.相对较小的社区:虽然 Flask 有一个活跃的社区,但相对于一些大型框架,其社区规模可能较小,这可能会影响到获取支持和解决问题的速度。
总体来说,Flask 是一个非常优秀和受欢迎的 Web 框架,它的简单性和灵活性使得它适用于快速开发小型和中小型的 Web 应用和 API。但对于复杂的大型 Web 应用,可能需要权衡其功能限制并结合其他工具来满足需求。
出处:https://www.cnblogs.com/xiaoqingSister/p/17605659.html
1.flask-restful
2.不用restful
(1)返回json
from flask import Flask, jsonify
from datetime import datetime
app = Flask(__name__)
@app.route('/time')
def get_time():
now = datetime.now()
return jsonify({'time': now.strftime('%Y-%m-%d %H:%M:%S')})
if __name__ == '__main__':
app.run(debug=True)
(2)接收get
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/user')
def get_user():
name = request.args.get('name')
age = request.args.get('age')
response_data = {'name': name, 'age': age}
return jsonify(response_data)
if __name__ == '__main__':
app.run()
postman测试结果:
(3)接收post
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/user', methods=['POST'])
def create_user():
name = request.form.get('name')
age = request.form.get('age')
response_data = {'name': name, 'age': age}
return jsonify(response_data)
if __name__ == '__main__':
app.run()
(4)接受get和post
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'GET':
name = request.args.get('name')
age = request.args.get('age')
data = {'name': name, 'age': age}
return jsonify(data)
elif request.method == 'POST':
name = request.json.get('name')
age = request.json.get('age')
data = {'name': name, 'age': age}
return jsonify(data)
if __name__ == '__main__':
app.run(debug=True)
(5)接收JSON
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/user', methods=['POST'])
def create_user():
request_data = request.get_json()
name = request_data.get('name')
age = request_data.get('age')
response_data = {'name': name, 'age': age}
return jsonify(response_data)
if __name__ == '__main__':
app.run()
3.request.json和request.get_json()区别
出处:https://blog.csdn.net/qq233325332/article/details/129078525
https://www.cnblogs.com/Owen-ET/p/16551514.html