iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么使用Flask构建简单的RESTful服务
  • 369
分享到

怎么使用Flask构建简单的RESTful服务

2023-06-05 07:06:20 369人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关怎么使用flask构建简单的RESTful服务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。    我们现在的

本篇文章给大家分享的是有关怎么使用flask构建简单的RESTful服务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

    我们现在的一个项目是使用Django来构建,说来也是基于技术扩展的考虑,我对于DjanGo里面大而全的一些组件还是持有保守态度,所以虽然项目用了Django,但是对于很多组件的使用都是尽可能少用或者不用,这样一来虽然前期清苦些,但是从现在来看,由于依赖很低,我可以匹配很多种其他的方案。

    当然对我来说我格外喜欢Django的ORM方案,这个我对比了下Flask方向的ORM方案sqlAlchemy,Django的感觉要更好一些。

    而在RESTful的方向上,Django自身的第三方实现rest_framework也不错,现在看起来很简单的概念和实现,用了很长一段时间才彻底理解。

    而反过来看下Flask的RESTful方案,其实也有一定的借鉴意义。

    Flask比Django要简练的多,我们来看一个最简单的Flask例子,比如开启一个WEB服务,打印出hello world

    代码如下:

    from flask import Flask

    app = Flask(__name__)

    @app.route('/')

    def hello_world():

      return 'Hello World!'

    if __name__ == '__main__':

      app.run('192.168.56.102')

最后的IP是我的服务器IP,可以根据需要替换。

使用如下的方式来运行,服务即可开启。

[root@dev01 flask]# python hello.py 

 * Running on Http://192.168.56.102:5000/ (Press CTRL+C to quit)

192.168.56.1 - - [19/May/2018 22:29:22] "GET / HTTP/1.1" 200 -

192.168.56.1 - - [19/May/2018 22:29:22] "GET /favicon.ico HTTP/1.1" 404 -

192.168.56.1 - - [19/May/2018 22:29:22] "GET /favicon.ico HTTP/1.1" 404 -

得到的结果如下:

请输入描述

到了这里,如果是做过Python web开发的同学很可能说,这不是忽悠我呢,Python自身的技术也可以实现,本身Python就实现了一个Simplehttpserver,可以参见之前的一篇文章:?如果理解Python web开发技术?

里面的代码看起来更简洁:

#!/usr/bin/env python#coding:utf-8from wsgiref.simple_server import make_serverdef RunServer(environ, start_response):    start_response('200 OK', [('Content-Type', 'text/html')])    return '<h2>Hello, wsgi!</h2>'if __name__ == '__main__':    httpd = make_server('', 8000, RunServer)    print "Serving HTTP on port 8000..."    httpd.serve_forever()

我们来看看一个相对完整的Flask代码示例,内容参考了:https://www.jianshu.com/p/6ac1cab17929

代码如下:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# by vellhe 2017/7/9

from flask import Flask, abort, request, JSONify

app = Flask(__name__)

# 测试数据暂时存放

tasks = []

@app.route('/add_task/', methods=['POST'])

def add_task():

 #需要自己来维护这个列表结构

  if not request.json or 'id' not in request.json or 'info' not in request.json:

    abort(400)

  task = {

    'id': request.json['id'],

    'info': request.json['info']

  }

  tasks.append(task)

  return jsonify({'result': 'success'})

@app.route('/get_task/', methods=['GET'])

def get_task():

  if not request.args or 'id' not in request.args:

    # 没有指定id则返回全部

    return jsonify(tasks)

  else:

    task_id = request.args['id']

    task = filter(lambda t: t['id'] == int(task_id), tasks)

    return jsonify(task) if task else jsonify({'result': 'not found'})

if __name__ == "__main__":

  # 将host设置为192.168.56.102,则外网用户也可以访问到这个服务

  app.run(host="192.168.56.102", port=8383, debug=True)

这个程序的一个难点就是如何在浏览器中模拟这个POST请求,当然可以使用postman来做,windows端可以参考这个链接下载:

https://app.getpostman.com/app/download/win64

第二个难点就是对于JSON的处理,里面还是有很多的参考之处。总体感觉虽然可以实现,但是所有的细节都需要自己来控制,比如输入结构,输出结构,信息查找的匹配,还有url和方法的映射。总是感觉有些拖泥带水,拖累太重,you can you up的感觉。

使用RESTful的方式,在Flask里面就是引入这个模块即可,相对来说比较简洁和轻量。

要安装flask_restful的话,一个命令即可。

pip install flask_restful

比如我有个需求,做一个基本的任务管理需求,可以分为两类功能,对任务理和任务列表管理,任务管理包括查看任务,增加,删除任务,都是对应单一的任务。任务列表就是对多个任务信息的查询和添加。

这种需求,其实基本的处理单元是任务,每一层级都可以不断的细化。尽可能对于应用层面来说更加透明,比如我就开放一个url: todos完成任务列表的管理,可以查看任务列表,添加任务信息。

todos/todo1 完成对单一任务的管理,比如添加修改,删除。

这个例子可能听起来不是很清晰,我举一个生活中的例子,比如你去一个游乐园,只有一个服务台,充值,退卡,办卡的需求都是在这一个柜台办理。这个时候需求可能是这几类:

比如你给他100块钱,那就意味着你要办卡,并且充值相应的金额(可能还要扣除工本费)

比如你给他100块钱,并且带卡,那就意味着你要充值

比如你给他一张卡,那就意味着你要退钱。

所以上述的需求,输入可能很简单,但是对应的业务场景可能截然不同。所以上述的代码要实现这个需求,逻辑还是比较复杂,而且不够清晰。

RESTful里面的一个优势就是可以基于class来构建不同的需求接口,可能对外开放的url是一个统一入口,但是可以在这个基础上进行细化。比如url: /todos和/todos/todo1

写一个程序脚本来实现:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

from flask import Flask

from flask_restful import reqparse, abort, api, Resource

app = Flask(__name__)

api = Api(app)

TODOS = {

  'todo1': {'task': 'test1'},

  'todo2': {'task': 'test2'},

  'todo3': {'task': 'test3'},

}

def abort_if_todo_doesnt_exist(todo_id):

  if todo_id not in TODOS:

    abort(404, message="Todo {} doesn't exist".format(todo_id))

parser = reqparse.RequestParser()

parser.add_argument('task')

# Todo

# shows a single todo item and lets you delete a todo item

class Todo(Resource):

  def get(self, todo_id):

    abort_if_todo_doesnt_exist(todo_id)

    return TODOS[todo_id]

  def delete(self, todo_id):

    abort_if_todo_doesnt_exist(todo_id)

    del TODOS[todo_id]

    return '', 204

  def put(self, todo_id):

    args = parser.parse_args()

    task = {'task': args['task']}

    TODOS[todo_id] = task

    return task, 201

# TodoList

# shows a list of all todos, and lets you POST to add new tasks

class TodoList(Resource):

  def get(self):

    return TODOS

  def post(self):

    args = parser.parse_args()

    todo_id = int(max(TODOS.keys()).lstrip('todo')) + 1

    todo_id = 'todo%i' % todo_id

    TODOS[todo_id] = {'task': args['task']}

    return TODOS[todo_id], 201

##

## Actually setup the Api resource routing here

##

api.add_resource(TodoList, '/todos')

api.add_resource(Todo, '/todos/<todo_id>')

if __name__ == '__main__':

  app.run('192.168.56.102',debug=True)

调用情况如下:

怎么使用Flask构建简单的RESTful服务

请输入描述

如果是查看某一个task的信息,可以直接输入即可匹配。

怎么使用Flask构建简单的RESTful服务

请输入描述

看一下代码其实会发现,这里注册了两个API,这里和上面程序的不同就在于里面使用了Resource做了封装,如果我要添加一个逻辑,其实也是很方便的。不需要堆砌一大堆的if-else

以上就是怎么使用Flask构建简单的RESTful服务,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 怎么使用Flask构建简单的RESTful服务

本文链接: https://www.lsjlt.com/news/241735.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么使用Flask构建简单的RESTful服务
    本篇文章给大家分享的是有关怎么使用Flask构建简单的RESTful服务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。    我们现在的...
    99+
    2023-06-05
  • Python Flask RESTful怎么使用
    本篇内容介绍了“Python Flask RESTful怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、RES...
    99+
    2023-07-05
  • 怎么使用Jersey创建RESTful服务
    要使用Jersey创建RESTful服务,您可以按照以下步骤进行操作:1. 首先,确保已经设置好Java开发环境和Maven构建工具...
    99+
    2023-10-23
    Jersey
  • 怎么使用python http服务flask架构
    本篇内容介绍了“怎么使用python http服务flask架构”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!依赖库flask安装,使用豆瓣...
    99+
    2023-06-25
  • 如何使用Python构建简单的UI
    如何使用Python构建简单的UI,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。借助Streamlit框架,使用用户界面展示Python项目变得前所未有的简单,...
    99+
    2023-06-16
  • ESP32构建简单WebServer服务器
    目录 WebServer 服务器ESP32 filesystem uploaderWebServer 库WIFI 链接网页与代码烧录 WebServer 服务器 此案...
    99+
    2023-08-30
    服务器 github java esp32 arduino
  • 如何使用Node.js构建一个简单Web服务器
    Node.js是一个用于后端服务的JavaScript运行环境,它允许开发者使用同一种语言编写服务器端和客户端应用程序。与其他后端技术相比,Node.js具有更高的处理能力和更好的可扩展性。在这篇文章中,我们将介绍如何使用Node.js构建...
    99+
    2023-05-14
  • 怎么使用node.js搭建简单web服务器
    这篇文章主要介绍“怎么使用node.js搭建简单web服务器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用node.js搭建简单web服务器”文章能帮助大家解决问题。准备首先,需要安装nod...
    99+
    2023-06-17
  • 使用 Python 构建 GUI 最简单的方法
    根据我的经验,所有使用 Python 的 GUI 框架(Tkinter、PyQT 等)似乎都有些难以上手。那么让我们来看看我最喜欢且最简单的使用 Python 构建 GUI 的方法之一!Streamlit我喜欢使用的包是 Streamlit...
    99+
    2023-05-14
    开发 Python GUI
  • 怎么使用Flask实现简单的车牌识别Web应用
    这篇文章主要介绍了怎么使用Flask实现简单的车牌识别Web应用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Flask实现简单的车牌识别Web应用文章都会有所收获,下面我们一起来看看吧。Flask框架...
    99+
    2023-07-05
  • Python flask sqlalchemy的简单使用及常用操作
    目录前言flask sqlalchemy的配置使用sqlalchemy的增删改查查询数据增加数据修改数据删除数据总结前言 说到面向对象,大家都不陌生。关系型数据库也是后端日常用来存储...
    99+
    2024-04-02
  • 怎么使用flask轻松搭建mock服务
    本篇内容主要讲解“怎么使用flask轻松搭建mock服务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用flask轻松搭建mock服务”吧!做过接口测试的...
    99+
    2024-04-02
  • 聊聊Go语言怎么构建一个简单的HTTP服务
    在如今的软件开发领域中,Go语言已经成为了极其活跃的语言之一。与其他语言相比,Go语言独特的并发模型和轻量级的线程架构使得它非常适合构建高并发的网络应用、分布式系统和云服务。本文将介绍如何使用Go语言构建一个简单的HTTP服务,并且涉及到如...
    99+
    2023-05-14
  • 最简单的云服务器怎么搭建
    搭建最简单的云服务器可以参考以下步骤:1.选择云服务提供商:根据需求选择一家云服务提供商。2.注册账号:在选定的云服务提供商网站上注...
    99+
    2023-09-27
    云服务器
  • 怎么使用Python人工智能构建简单聊天机器人
    今天小编给大家分享一下怎么使用Python人工智能构建简单聊天机器人的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是聊天...
    99+
    2023-07-05
  • 微服务云架构-Swagger2构建强大的RESTful API文档
    在完成了上述配置后,其实已经可以生产文档内容,但是这样的文档主要针对请求本身,而描述主要来源于函数等命名产生,对用户并不友好,我们通常需要自己增加一些说明来丰富文档内容。如下所示,我们通过@ApiOperation注解来给API增加说明、通...
    99+
    2023-06-05
  • 使用Go和Laravel构建RESTful API的最佳实践
    RESTful API是现代Web应用程序中不可或缺的一部分。它们使得Web应用程序能够以统一的方式与客户端通信,这样客户端就可以使用各种语言和平台来访问和使用Web应用程序。本文将介绍。 一、Go Go是一种由谷歌开发的编程语言,被广泛...
    99+
    2023-08-16
    laravel 学习笔记 shell
  • vs2019中使用MFC构建简单windows窗口程序
    微软基础类库(英语: Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,...
    99+
    2024-04-02
  • 怎么用Node创建一个简单的HTTP服务器
    这篇文章主要介绍“怎么用Node创建一个简单的HTTP服务器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用Node创建一个简单的HTTP服务器”文章能帮助大家解决问题。1. 使用Node.js...
    99+
    2023-07-04
  • node.js怎么搭建简单web服务器
    今天小编给大家分享一下node.js怎么搭建简单web服务器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2022-12-01
    node.js web服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作