flask接口开发(flask接口开发例子)

网友投稿 476 2023-03-20


本篇文章给大家谈谈flask接口开发,以及flask接口开发例子对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享flask接口开发的知识,其中也会对flask接口开发例子进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何使用python 开发一个api

使用 Python 和 Flask 设计 RESTful API

近些年来 REST (REpresentational State Transfer) 已经变成flask接口开发了 web services 和 web APIs 的标配。

在本文中我将向你展示如何简单地使用 Python 和 Flask 框架来创建一个 RESTful 的 web service。

什么是 RESTflask接口开发

六条设计规范定义了一个 REST 系统的特点:

客户端-服务器: 客户端和服务器之间隔离flask接口开发,服务器提供服务,客户端进行消费。

无状态: 从客户端到服务器的每个请求都必须包含理解请求所必需的信息。换句话说, 服务器不会存储客户端上一次请求的信息用来给下一次使用。

可缓存: 服务器必须明示客户端请求能否缓存。

分层系统: 客户端和服务器之间的通信应该以一种标准的方式,就是中间层代替服务器做出响应的时候,客户端不需要做任何变动。

统一的接口: 服务器和客户端的通信方法必须是统一的。

按需编码: 服务器可以提供可执行代码或脚本,为客户端在它们的环境中执行。这个约束是唯一一个是可选的。

什么是一个 RESTful 的 web service?

REST 架构的最初目的是适应万维网的 HTTP 协议。

RESTful web services 概念的核心就是“资源”。 资源可以用 URI 来表示。客户端使用 HTTP 协议定义的方法来发送请求到这些 URIs,当然可能会导致这些被访问的”资源“状态的改变。

HTTP 标准的方法有如下:

==========  =====================  ==================================
HTTP 方法   行为                   示例
==========  =====================  ==================================
GET         获取资源的信息         http://example.com/api/orders
GET         获取某个特定资源的信息 http://example.com/api/orders/123
POST        创建新资源             http://example.com/api/orders
PUT         更新资源               http://example.com/api/orders/123
DELETE      删除资源               http://example.com/api/orders/123
==========  ====================== ==================================

REST 设计不需要特定的数据格式。在请求中数据可以以 JSON 形式, 或者有时候作为 url 中查询参数项。

设计一个简单的 web service

坚持 REST 的准则设计一个 web service 或者 API 的任务就变成一个标识资源被展示出来以及它们是怎样受不同的请求方法影响的练习。

比如说,我们要编写一个待办事项应用程序而且我们想要为它设计一个 web service。要做的第一件事情就是决定用什么样的根 URL 来访问该服务。例如,我们可以通过这个来访问:

http://[hostname]/todo/api/v1.0/

在这里我已经决定在 URL 中包含应用的名称以及 API 的版本号。在 URL 中包含应用名称有助于提供一个命名空间以便区分同一系统上的其它服务。在 URL 中包含版本号能够帮助以后的更新,如果新版本中存在新的和潜在不兼容的功能,可以不影响依赖于较旧的功能的应用程序。

下一步骤就是选择将由该服务暴露(展示)的资源。这是一个十分简单地应用,我们只有任务,因此在我们待办事项中唯一的资源就是任务。

我们的任务资源将要使用 HTTP 方法如下:

==========  ===============================================  =============================
HTTP 方法   URL                                              动作
==========  ===============================================  ==============================
GET         http://[hostname]/todo/api/v1.0/tasks            检索任务列表
GET         http://[hostname]/todo/api/v1.0/tasks/[task_id]  检索某个任务
POST        http://[hostname]/todo/api/v1.0/tasks            创建新任务
PUT         http://[hostname]/todo/api/v1.0/tasks/[task_id]  更新任务
DELETE      http://[hostname]/todo/api/v1.0/tasks/[task_id]  删除任务
==========  ================================================ =============================

我们定义的任务有如下一些属性:

id: 任务的唯一标识符。数字类型。

title: 简短的任务描述。字符串类型。

description: 具体的任务描述。文本类型。

done: 任务完成的状态。布尔值。

目前为止关于我们的 web service 的设计基本完成。剩下的事情就是实现它!

Flask 框架的简介

如果你读过 Flask Mega-Tutorial 系列,就会知道 Flask 是一个简单却十分强大的 Python web 框架。

在我们深入研究 web services 的细节之前,让我们回顾一下一个普通的 Flask Web 应用程序的结构。

我会首先假设你知道 Python 在你的平台上工作的基本知识。 我将讲解的例子是工作在一个类 Unix 操作系统。简而言之,这意味着它们能工作在 Linux,Mac OS X 和 Windows(如果你使用Cygwin)。 如果你使用 Windows 上原生的 Python 版本的话,命令会有所不同。

让我们开始在一个虚拟环境上安装 Flask。如果你的系统上没有 virtualenv,你可以从https://pypi.python.org/pypi/virtualenv 上下载:

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask

既然已经安装了 Flask,现在开始创建一个简单地网页应用,我们把它放在一个叫 app.py 的文件中:

#!flask/bin/pythonfrom flask import Flaskapp = Flask(__name__)@app.route('/')def index():
   return "Hello, World!"if __name__ == '__main__':
   app.run(debug=True)

为了运行这个程序我们必须执行 app.py:

$ chmod a+x app.py
$ ./app.py
* Running on
* Restarting with reloader

现在你可以启动你的网页浏览器,输入 http://localhost:5000 看看这个小应用程序的效果。

简单吧?现在我们将这个应用程序转换成我们的 RESTful service!

使用 Python 和 Flask 实现 RESTful services

使用 Flask 构建 web services 是十分简单地,比我在 Mega-Tutorial 中构建的完整的服务端的应用程序要简单地多。

在 Flask 中有许多扩展来帮助我们构建 RESTful services,但是在我看来这个任务十分简单,没有必要使用 Flask 扩展。

我们 web service 的客户端需要添加、删除以及修改任务的服务,因此显然我们需要一种方式来存储任务。最直接的方式就是建立一个小型的数据库,但是数据库并不是本文的主体。学习在 Flask 中使用合适的数据库,我强烈建议阅读 Mega-Tutorial。

这里我们直接把任务列表存储在内存中,因此这些任务列表只会在 web 服务器运行中工作,在结束的时候就失效。 这种方式只是适用我们自己开发的 web 服务器,不适用于生产环境的 web 服务器, 这种情况一个合适的数据库的搭建是必须的。

我们现在来实现 web service 的第一个入口:

#!flask/bin/pythonfrom flask import Flask, jsonifyapp = Flask(__name__)tasks = [
   {
       'id': 1,
       'title': u'Buy groceries',
       'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
       'done': False
   },
   {
       'id': 2,
       'title': u'Learn Python',
       'description': u'Need to find a good Python tutorial on the web',
       'done': False
   }]@app.route('/todo/api/v1.0/tasks', methods=['GET'])def get_tasks():
   return jsonify({'tasks': tasks})if __name__ == '__main__':
   app.run(debug=True)

正如你所见,没有多大的变化。我们创建一个任务的内存数据库,这里无非就是一个字典和数组。数组中的每一个元素都具有上述定义的任务的属性。

取代了首页,我们现在拥有一个 get_tasks 的函数,访问的 URI 为 /todo/api/v1.0/tasks,并且只允许 GET 的 HTTP 方法。

这个函数的响应不是文本,我们使用 JSON 数据格式来响应,Flask 的 jsonify 函数从我们的数据结构中生成。

使用网页浏览器来测试我们的 web service 不是一个最好的注意,因为网页浏览器上不能轻易地模拟所有的 HTTP 请求的方法。相反,我们会使用 curl。如果你还没有安装 curl 的话,请立即安装它。

通过执行 app.py,启动 web service。接着打开一个新的控制台窗口,运行以下命令:

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT
{
 "tasks": [
   {
     "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
     "done": false,
     "id": 1,
     "title": "Buy groceries"
   },
   {
     "description": "Need to find a good Python tutorial on the web",
     "done": false,
     "id": 2,
     "title": "Learn Python"
   }
 ]
}

我们已经成功地调用我们的 RESTful service 的一个函数!

现在我们开始编写 GET 方法请求我们的任务资源的第二个版本。这是一个用来返回单独一个任务的函数:

from flask import abort@app.route('/todo/api/v1.0/tasksint:task_id', methods=['GET'])def get_task(task_id):
   task = filter(lambda t: t['id'] == task_id, tasks)
   if len(task) == 0:
       abort(404)
   return jsonify({'task': task[0]})

第二个函数有些意思。这里我们得到了 URL 中任务的 id,接着 Flask 把它转换成 函数中的 task_id 的参数。

我们用这个参数来搜索我们的任务数组。如果我们的数据库中不存在搜索的 id,我们将会返回一个类似 404 的错误,根据 HTTP 规范的意思是 “资源未找到”。

如果我们找到相应的任务,那么我们只需将它用 jsonify 打包成 JSON 格式并将其发送作为响应,就像我们以前那样处理整个任务集合。

调用 curl 请求的结果如下:

$ curl -i http://localhost:5000/todo/api/v1.0/tasks/2
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 151
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:21:50 GMT
{
 "task": {
   "description": "Need to find a good Python tutorial on the web",
   "done": false,
   "id": 2,
   "title": "Learn Python"
 }
}
$ curl -i http://localhost:5000/todo/api/v1.0/tasks/3
HTTP/1.0 404 NOT FOUND
Content-Type: text/html
Content-Length: 238
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:21:52 GMT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"
<title404 Not Found</title
<h1Not Found</h1
<pThe requested URL was not found on the server.</p<pIf you     entered the URL manually please check your spelling and try again.</p

当我们请求 id #2 的资源时候,我们获取到了,但是当我们请求 #3 的时候返回了 404 错误。有关错误奇怪的是返回的是 HTML 信息而不是 JSON,这是因为 Flask 按照默认方式生成 404 响应。由于这是一个 Web service 客户端希望我们总是以 JSON 格式回应,所以我们需要改善我们的 404 错误处理程序:

from flask import make_response@app.errorhandler(404)def not_found(error):
   return make_response(jsonify({'error': 'Not found'}), 404)

我们会得到一个友好的错误提示:

$ curl -i http://localhost:5000/todo/api/v1.0/tasks/3
HTTP/1.0 404 NOT FOUND
Content-Type: application/json
Content-Length: 26
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:36:54 GMT
{
 "error": "Not found"
}

接下来就是 POST 方法,我们用来在我们的任务数据库中插入一个新的任务:

from flask import request@app.route('/todo/api/v1.0/tasks', methods=['POST'])def create_task():
   if not request.json or not 'title' in request.json:
       abort(400)
   task = {
       'id': tasks[-1]['id'] + 1,
       'title': request.json['title'],
       'description': request.json.get('description', ""),
       'done': False
   }
   tasks.append(task)
   return jsonify({'task': task}), 201

添加一个新的任务也是相当容易地。只有当请求以 JSON 格式形式,request.json 才会有请求的数据。如果没有数据,或者存在数据但是缺少 title 项,我们将会返回 400,这是表示请求无效。

接着我们会创建一个新的任务字典,使用最后一个任务的 id + 1 作为该任务的 id。我们允许 description 字段缺失,并且假设 done 字段设置成 False。

我们把新的任务添加到我们的任务数组中,并且把新添加的任务和状态 201 响应给客户端。

使用如下的 curl 命令来测试这个新的函数:

$ curl -i -H "Content-Type: application/json" -X POST -d '{"title":"Read a book"}' http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 201 Created
Content-Type: application/json
Content-Length: 104
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:56:21 GMT
{
 "task": {
   "description": "",
   "done": false,
   "id": 3,
   "title": "Read a book"
 }
}

注意flask接口开发:如果你在 Windows 上并且运行 Cygwin 版本的 curl,上面的命令不会有任何问题。然而,如果你使用原生的 curl,命令会有些不同:

curl -i -H "Content-Type: application/json" -X POST -d "{"""title""":"""Read a book"""}" http://localhost:5000/todo/api/v1.0/tasks

当然在完成这个请求后,我们可以得到任务的更新列表:

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 423
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:57:44 GMT
{
 "tasks": [
   {
     "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
     "done": false,
     "id": 1,
     "title": "Buy groceries"
   },
   {
     "description": "Need to find a good Python tutorial on the web",
     "done": false,
     "id": 2,
     "title": "Learn Python"
   },
   {
     "description": "",
     "done": false,
     "id": 3,
     "title": "Read a book"
   }
 ]
}

剩下的两个函数如下所示:

@app.route('/todo/api/v1.0/tasksint:task_id', methods=['PUT'])def update_task(task_id):
   task = filter(lambda t: t['id'] == task_id, tasks)
   if len(task) == 0:
       abort(404)
   if not request.json:
       abort(400)
   if 'title' in request.json and type(request.json['title']) != unicode:
       abort(400)
   if 'description' in request.json and type(request.json['description']) is not unicode:
       abort(400)

python就业对学历要求高吗?

那找Python工作一般需要什么要求呢?
1、熟悉python编码规范,良好的编程习惯;
2、熟悉python基本数据类型的操作;
3、熟悉python各类主流类库;
4、熟悉django,flask等框架,有高并发接口开发经验优先;
5、熟悉mysql、redis、mongodb、postgresql者优先;
6、熟悉Linux开发,能写shell者优先;
7.、热爱编程,学习能力强。
二、以上是找Python工作的基本技术要求,乍看这么多,是不是感觉压力很大?当然不是每一项都要满足才能做Python工作,毕竟人无完人,HR只是按照他们的最高标准来写而已,就跟你当老板一样 你也希望自己的员工都非常牛逼,如果要100%满足的话,估计老板是打算永远空缺这个职位。
如果你是低学历,万一你不想说善意的谎言,也没事,招聘网上可以选择不要求学历的单位你也可以去,不一定非要吊死要求高的公司,

python web开发用哪个框架比较好

(1)Django。Djangoflask接口开发的文档最完善、市场占有率最高、招聘职位最多估计大家都没什么意见。完美的文档flask接口开发,Django的成功flask接口开发,我觉得很大一部分原因要归功于Django近乎完美的官方文档(包括Django book)。全套的解决方案,Django象Rails一样,提供全套的解决方案(full-stack framework + batteries included),基本要什么有什么(比如:cache、session、feed、orm、geo、auth),而且全部Django自己造,开发网 站应手的工具Django基本都给你做好flask接口开发了,因此开发效率是不用说的,出了问题也算好找,不在你的代码里就在Django的源码里。
(2)Pylons和Django的设计理念完全不同,Pylons本身只有两千行左右的Python代码,不过它还附带有一些几乎就是Pylons御用 的第三方模块。Pylons只提供一个架子和可选方案,你可以根据自己的喜好自由的选择Template、ORM、form、auth等组件,系统高度可 定制。我们常说Python是一个胶水语言(glue language),那么我们完全可以说Pylons就是一个用胶水语言设计的胶水框架。
(3)Tornado即是一个Web server(对此本文不作详述),同时又是一个类web.py的micro-framework,作为框架Tornado的思想主要来源于Web.py,大家在Web.py的网站首页也可以看到Tornado的大佬Bret Taylor的这么一段话(flask接口开发他这里说的FriendFeed用的框架跟Tornado可以看作是一个东西):
(4)Bottle和Flask作为新生一代Python框架的代表,挺有意思的是都采用了decorator的方式配置URL路由。
(5)Flask 精简
(6)web.py 非常精简

python的web开发框架有哪些

1.CubicWeb

CubicWeb的最重要的功能是其代码的可重用性,由一个个代码单元组成。它灵活又强大,并且还有一些特别的功能,包括RQL查询语言和支持有效编码的语义视图功能。这是语义Web应用程序的最佳解决方案,并且提供理想的环境。

2.TurboGears

TurboGears也称为是框架的终结者,因为它虽然有着其他Python框架都有的功能,却不像其他框架那样有局限性。它甚至能适用于简单的微架构项目。它给人的感觉就不像是工作在框架上,而像是在写新的功能。你可以在几分钟之内可以创建一个read-to-extend应用,并且我们可以在网上找到大量的教程。

3.Zope2

Zope是不同Web框架集合在一起的完整家庭。与其他框架相比,zope2在当前的开发环境中对于内容管理系统是相当有限的。
Zope工具包是一个很好的库资源,允许使用重用代码和不同的库。

4.web2py

web2py最重要的因素是其外部零依赖,可以创建、复原、管理和修改在浏览器中的应用程序。对于一些简单的web开发任务,大部分都可以自动化快速开发。程序员甚至不需要再准备单一的开发、调试、测试、部署和数据库处理的封装包。内置的Web界面中这些都有,在使用之前也不需要进行安装。

5.Pylons

灵活性是pylons框架的主要特点之一。它可以将不同Python框架提供的某些最好功能,整合到同一个地方。Pyramid是pylons的第一批产品之一,它把重点放在了快速和灵活开发实践上。你可以挑选任何你认为可以提高Web开发效率的功能整合到一起。

6.Grok

它由Zope工具包提供支持,并且一开始的时候是作为一个易扩展的Zope工具箱,为了方便那些菜鸟程序员的使用而开发
的。对于Web应用,Grok不但能提供多个构件,还有一个随时可以提供支持的很好社区。它提供了一种更为简单和灵活的学习Python的模式。它配备的可DRY方法使得它成为了一个很好的工具。

7.Web.py

之所以说这是一款非常独特的框架,主要是因为它的简单性和功能强大的开发能力。你可以用Python语言舒舒服服地编写web应用程序。你会因为它的零局限性和易用性喜欢上web.py。有些程序员可能会发现它对功能的限制比较少,因为它预留了整合的空间,所以你不必一下子加载所有的功能,尤其是那些你并不需要的。

关于框架选择的误区:

1.
哪个框架最好

2. 过分关注性能

python web开发 该用什么框架

Djang Python Web应用开发框架
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。
Flask:一个用Python编写的轻量级Web应用框架
Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2
。Flask使用 BSD 授权。
Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension
增加其他功能。Flask没有默认使用的数据库、窗体验证工具。
Tornado:异步非阻塞IO的Python Web框架
Tornado是一种 Web 服务器软件的开源版本。Tornado 和主流Web 服务器框架(包括大多数 Python
的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。
得利于其非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。 关于flask接口开发和flask接口开发例子的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 flask接口开发的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于flask接口开发例子、flask接口开发的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:接口测试用例有预期结果吗(接口测试用例的编写要点)
下一篇:路由器管理密码 破解(破解路由器管理密码破解)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~