首页 > 编程语言 >Flask快速搭建接口-python库

Flask快速搭建接口-python库

时间:2023-08-04 13:46:53浏览次数:39  
标签:跨域 Flask app 接口 python API CORS 模板

Flask 是一个基于 Python 的轻量级 Web 框架,用于构建 Web 应用程序和 RESTful API。它被设计为简单、易用、灵活,并且具有良好的扩展性。Flask 是一个微型框架,提供了一些基本功能,但也允许开发者根据需要选择并添加扩展。

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_appg,可以在视图函数中使用。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 页面,使页面构建更加灵活和易于维护。

  6. 开放性和活跃社区:Flask 是一个开源项目,有一个活跃的社区,拥有大量的第三方库和扩展可供选择,帮助开发者更快地构建功能丰富的 Web 应用。

劣势

  1. 功能有限:Flask 是一个微型框架,相对于一些全功能的 Web 框架,它提供的功能相对较少。对于复杂的大型 Web 应用,可能需要结合一些扩展或其他库来满足需求。

  2. 缺少内置功能:由于 Flask 是一个轻量级框架,它并不包含一些高级的功能,例如数据库迁移、用户认证等。这些功能需要使用扩展或手动实现。

  3. 依赖于扩展:为了增加功能,开发者需要依赖一些扩展,而不是直接内置在框架中。这在一定程度上增加了应用的复杂性,需要管理更多的依赖关系。

  4. 相对较小的社区:虽然 Flask 有一个活跃的社区,但相对于一些大型框架,其社区规模可能较小,这可能会影响到获取支持和解决问题的速度。

总体来说,Flask 是一个非常优秀和受欢迎的 Web 框架,它的简单性和灵活性使得它适用于快速开发小型和中小型的 Web 应用和 API。但对于复杂的大型 Web 应用,可能需要权衡其功能限制并结合其他工具来满足需求。

 

示例

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run()

浏览器中访问 http://127.0.0.1:5000/ 来查看输出,会返回 Hello, World!

 

Flask 使用 Jinja2 模板引擎来渲染 HTML 页面,有没有简单的例子:

当使用 Flask 渲染 HTML 页面时,通常需要使用模板引擎来动态生成页面内容。 Flask 默认使用 Jinja2 模板引擎,以下是一个简单的示例:

 

1.首先,在项目目录下创建一个名为 "templates" 的文件夹,用于存放 HTML 模板文件。

 

 

2.在 "templates" 文件夹中创建一个名为 "index.html" 的模板文件,内容如下:

<!DOCTYPE html>
<html>
<head>
    <title>Hello Flask</title>
</head>
<body>
    <h1>Hello, {{ name }}!</h1>
    <p>This is a simple example of Flask template rendering.</p>
</body>
</html>

在上述模板中,我们使用了 {{ name }} 这样的占位符,它将在渲染页面时被动态替换成具体的值。

 

3.创建 Flask 应用并添加视图函数,将模板渲染并返回给客户端:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    name = 'John'  # 假设这个名字是从数据库或其他地方获取的
    return render_template('index.html', name=name)

if __name__ == '__main__':
    app.run()

在上述代码中,我们定义了一个名为 index 的视图函数,它会渲染模板 "index.html" 并将变量 name 的值传递给模板。

4.运行应用并在浏览器中访问 http://127.0.0.1:5000/,将会看到渲染后的页面,其中显示了 "Hello, John!" 和一条简单的说明。

在实际应用中,模板引擎的使用非常灵活,您可以在模板中嵌入任意动态数据,并根据实际需求来展示不同的内容。模板引擎让页面和数据的处理分离,使得开发更加便捷和维护更加简单。

 

用Flask能做到前后端分离吗?

是的,Flask 可以做到前后端分离。虽然 Flask 是一个服务器端的 Web 框架,但它可以通过提供 RESTful API 来实现前后端分离的架构。

在 Flask 中,您可以设计和实现一组 API 接口,这些接口定义了前端可以调用的功能和数据。前端开发团队可以使用任何前端框架(如 React、Vue.js、Angular 等)来构建用户界面和交互,然后通过 Fetch、Axios 等工具来调用 Flask 提供的 API。

具体实现前后端分离的步骤如下:

  1. 设计 API 接口:定义一组 RESTful API 接口,包括对资源的 CRUD 操作。这些接口通常使用 HTTP 方法(如 GET、POST、PUT、DELETE)来实现对后端资源的访问和操作。

  2. 后端开发:在 Flask 中实现定义好的 API 接口。可以使用 Flask 的路由和视图函数来处理 API 请求,并进行后端的业务逻辑处理和数据库访问。

  3. 前端开发:前端团队使用所选的前端框架来构建用户界面和交互,并通过 Fetch、Axios 等工具来调用 Flask 提供的 API 接口。前端开发团队可以独立进行开发,无需依赖于后端的实现。

  4. 跨域处理:由于前端和后端运行在不同的域或端口上,可能会涉及到跨域问题。在 Flask 中,您可以通过配置 CORS(跨域资源共享)来允许前端跨域访问后端 API。

通过前后端分离,Flask 可以实现前后端的独立开发和演进,提高开发效率,同时为构建现代化的 Web 应用提供更好的灵活性和扩展性。

跨域处理是啥?

跨域是指浏览器限制在一个域下的网页去请求另一个域下的资源。在前后端分离的架构中,前端通常运行在一个域或端口上,而后端 API 服务可能运行在另一个域或端口上,因此会涉及到跨域问题。

Flask 本身并不自动处理跨域请求,但可以通过配置 CORS(跨域资源共享)来允许跨域访问。CORS 是一种机制,允许服务器告诉浏览器是否允许在不同域之间进行跨域访问。

下面是在 Flask 中处理跨域请求的详细步骤:

安装 Flask-CORS 扩展:首先,需要安装 Flask-CORS 扩展。您可以使用 pip 安装:

pip install flask-cors

导入扩展:在 Flask 应用中,导入 Flask-CORS 扩展,并将其初始化为应用对象。

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

配置 CORS:您可以根据需要配置 CORS,例如指定允许的源(Origin)或请求头。

# 允许所有来源访问
CORS(app, resources={r"/*": {"origins": "*"}})

# 允许特定来源访问
CORS(app, resources={r"/*": {"origins": "http://example.com"}})

# 允许多个来源访问
CORS(app, resources={r"/*": {"origins": ["http://example.com", "http://example2.com"]}})

指定请求方法:默认情况下,CORS 只允许简单请求(如 GET、POST、HEAD)进行跨域访问。如果您的前端需要使用其他请求方法(如 PUT、DELETE 等),您需要在 CORS 配置中指定它们。

CORS(app, resources={r"/*": {"origins": "*", "methods": ["GET", "POST", "PUT", "DELETE"]}})

响应头设置:Flask-CORS 还可以配置其他响应头,如允许凭证(Credentials)和暴露头(Exposed Headers)等。

CORS(app, resources={r"/*": {"origins": "*", "supports_credentials": True, "expose_headers": "Authorization"}})

以上就是在 Flask 中处理跨域请求的基本步骤。通过配置 CORS,您可以允许前端从不同的域或端口访问后端 API,实现前后端分离架构中的跨域请求。

标签:跨域,Flask,app,接口,python,API,CORS,模板
From: https://www.cnblogs.com/xiaoqingSister/p/17605659.html

相关文章

  • Java 8特性,函数式接口编程
    一、函数式接口简介什么是函数式接口在接口中,有且只有一个抽象方法,那么这个接口就是函数式接口。函数式接口是Lambda表达式使用的前提条件。为什么使用函数式接口在Java中不支持将函数作为一个数据,也就不能将函数作为方法的参数进行传递。因此给函数外加一层接口的声明......
  • python爬虫学习小记——lxml板块
    python爬虫学习小记——lxml板块lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。XPath的选择功能......
  • mybatis mapper接口实例化原理
       面试题来了:“我们都知道mybatis的mapper接口是没有实现类的,在使用的时候你知道它是如何实例化的吗?”懵逼的我:“知道啊,用的是jdk自带的动态代理;”;饥渴的面试官:“嗯,没错,继续说,它底层做了哪些事情?”;懵逼的我:“就是动态代理啊,还有啥?”得意的面试官:“这样子啊,那你回去等......
  • python爬虫学习小记——request模块
    要学习爬虫我们首先要了解requests这个模块Pythonrequests模块Pythonrequests是一个常用的HTTP请求库,可以方便地向网站发送HTTP请求,并获取响应结果。requests模块比 urllib 模块更简洁。使用requests发送HTTP请求需要先导入requests模块:importrequests......
  • Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面
    当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用户界面)编程,用Python也可以写出漂亮的桌面程序,建议此次课程大家稍作了解不要浪费太多时间,因为没有哪家......
  • Python | 开源项目you-get的下载和使用
    安装前提条件建议使用以下依赖项:PythonFFmpeg(可选)RTMPDump$pythonPython3.9.11(tags/v3.9.11:2de452f,Mar162022,14:33:45)[MSCv.192964bit(AMD64)]onwin32Type"help","copyright","credits"or"license"formoreinformat......
  • python--compile、exec、eval函数使用
    compile(source,filename,mode,flags=0,dont_inherit=False,optimize=-1)参数说明:source:字符串或AST对象,表示需要进行编译的python代码filename:指定需要编译的代码文件,如果不是文件读取代码则传递一些可辨认的值.mode:用于标识必须当做那类代表来编译;(如果source是......
  • python调用RabbitMQ
    本文不涉及较难的操作,仅仅提供常用的生产消息和消费消息的方式。--好像也没啥花里胡哨的操作1、准备想要python调用rabbitMQ需要安装pika,所有需要提前安装好pika包#全局pipinstallpika;#如果用的anaconda的上面那个装不上可以试试这个?condainstallpika;2、代......
  • python 操作oracle
    表DDL--"C##TAPDATA_TEST".ALAM3definitionCREATETABLE"C##TAPDATA_TEST"."ALAM3"( "UID1"VARCHAR2(100)NOTNULLENABLE, "UID2"VARCHAR2(100)NOTNULLENABLE, "COLUMN1"VARCHAR2(100),......
  • 【OpenHarmony内核编程接口】介绍定时器管理两种定时器以及案例演示
    前言本文介绍了内核编程接口之软定时器软定时器软定时器含义软件定时器(Timer),是基于系统时钟tick且由软件来模拟的定时器,当经过设定的tick计数值后会触发用户定义的回调函数ps1:定时器触发函数的执行,不是线程ps2:当定时器到期时,将执行回调函数以运行特定的代码ps3:定时精度......