首页 > 其他分享 >Flask学习笔记

Flask学习笔记

时间:2024-03-18 20:57:16浏览次数:18  
标签:__ name Flask age request 笔记 学习 app

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

标签:__,name,Flask,age,request,笔记,学习,app
From: https://www.cnblogs.com/Gimm/p/18081296

相关文章

  • 学习笔记444—macbook软件卸载了图标还在launchpad上怎么办?一分钟搞定!
    macbook软件卸载了图标还在launchpad上怎么办?一分钟搞定!问题描述有时候,我们使用MacBook时没有从AppleStore安装软件,而是从一些非官方渠道安装的软件。这样我们将这些macbook软件卸载了之后,图标还会留在在launchpad(启动台)上,这些软件的图标无法删除,鼠标长按也不会出来叉叉。我们的......
  • JavaScript学习笔记6: 对象 - 字符串Stirng
    JS对象-字符串String字符串的创建方式<script>//字符串创建方式1varstr1=newString("str1");//字符串创建方式2varstr2="str2";</script>字符串属性&方法length属性<script>console.log("获取字符串的length属性");    con......
  • JavaScript学习笔记7: 对象 - 自定义对象&JSON
    JS对象-自定义对象&JSON自定义对象类似java的类Json的所有属性(key)需要用双引号包围,本质是字符串<script>    varuser={    name:"tom",    age:10,    gender:"male",    //eat:function(){}    //可以简写为    eat(){//自......
  • JavaScript学习笔记3: 数据类型,运算符,类型转换
    JS数据类型,运算符,类型转换利用typeof获取数据类型数字3的类型<script>console.log("3的类型:"+typeof3);</script>浮点数<script>console.log("3.14的类型:"+typeof3.14);</script>字符串<script>console.log("'......
  • JavaScript学习笔记4: 流程控制语句 ,函数
    流程控制语句与java基本一致的语法<script>vara=true;if(a){    //语句}else{    //语句}</script>函数函数定义方式1<script>functionadd(a,b){returna+b;}alert(add(1,2));//也可以用变量......
  • JavaScript学习笔记5: 对象 - 数组Array
    JS对象-数组Array数组的定义及特性数组定义<script>//数组定义方式1,赋值给变量vararr1=newArray(1,2,3);//数组定义方式2,初始化数组vararr2=[4,5,6];</script>JS数组长度可变<script>vararr2=[4,5,6];//数组初始长度为3......
  • JavaScrpt学习_2024年3月18日
    一、Js编写位置<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><!--可以将js代码编写到外部js文件中,然后通过script标签引入写到外部文件中可以在不同页面中同时使用,也可以利用到浏览器大的缓存机制推......
  • Unity类银河恶魔城学习记录11-1 p103 Item源代码
     Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考此代码仅为较上一P有所改变的代码【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibiliItemData.csusingSystem.Collections;usingSystem.Collections.Generic;usingUn......
  • Unity类银河恶魔城学习记录10-14 p102 Applying damage to skills and clean up源代码
     Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考此代码仅为较上一P有所改变的代码【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibiliEntity.csusingSystem.Collections;usingSystem.Collections.Generic;usingUnit......
  • 微信小程序学习(第四章总结)
    页面组件4.1组件的定义及属性        组件是页面视图层(WXML)的基本组成单元,组件组合可以构建功能强大的页面结构。小程序框架为开发者提供了容器视图、基础内容、表单、导航、多媒体、地图、画布开放能力等8类(30多个)基础组件。        每一个组件都由一......