python模块api
‘壹’ python如何提供api
python有个etcd的库,可以网上搜下看下这个库的使用以及它开发的api接口,
不过之前go使用etcd的时候,是调用etcd本身的rest api,没有使用第三方的etcd的库
etcd的api文档github上有的,搜下这个coreos/etcd
你可以选择自己喜欢的方式
‘贰’ 如何导入饭否的python api模块
我看了一下。它是一个django的小型网站,可能内建的API。但是主体上不是API,只是一个小网站。
它有一个README,你可以打开看一下。里面有详细说明。我就不复制过来了。
其实说明了如何设置KEY,如何SETTING等等。
另外它的子目录里有一个工具箱。可以直接安装在你的python目录里。
‘叁’ Python的模块和库的区别是哪些
python模块是:
自我包含并且有组织的代码片段为模块。
表现形式为:写的代码保存为文件。这个文件就是一个模块。test.py 其中文件名test为模块名字。
python包是:
包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。
通俗一点:包是一个包含__init__.py 文件的目录,该目录下一定得有这个__init__.py文件和其它模块或子包。
python库是:
参考其它编程语言的说法,就是指python中的完成一定功能的代码集合,供用户使用的代码组合。在python中是包和模块的形式。
一般按照API的惯例来设计库。
‘肆’ python怎么调用api接口
调用windows API的方式其实有两种,第一种是通过第三方模块pywin32。
如果小伙伴安装了pip,可以通过pip安装pywin32
在命令行中运行pip pst查看是否安装了pywin32
如图
我们这里调用一个windows最基本的API,MessageBox,该接口可以显示一个对话框。
这里小编就不过多介绍了,只简单的描述MessageBox接口,MessageBox是windows的一个API接口,作用是显示一个对话框。
原型为:
int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);
第一个参数hWnd,指明了该对话框属于哪个窗口,lpText为窗口提示信息,lpCaption则为窗口标题,uType则是定义对话框的按钮和图标。
这里我们需要导入win32api这个模块(隶属于pywin32),如果需要宏定义的,API的宏被定义在win32con(同隶属于pywin32)模块内。
这里我们只导入一个win32api模块,然后简单的调用MessageBox显示一个对话框即可。
如果我们不会安装pywin32模块,或者说不想安装这个三方模块。这时我们还有一个办法。
调用python内置模块ctypes,如果小伙伴有windows编程基础的话,或者看过一点MSDN的话,都该知道,Windows的API其实是以dll文件(动态链接库)方式存在的。
+和|效果是相同的
更多Python相关技术文章,请访问Python教程栏目进行学习!以上就是小编分享的关于python怎么调用api接口的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!
‘伍’ 如何使用python 开发一个api
使用 Python 和 Flask 设计 RESTful API
近些年来 REST (REpresentational State Transfer) 已经变成了 web services 和 web APIs 的标配。
在本文中我将向你展示如何简单地使用 Python 和 Flask 框架来创建一个 RESTful 的 web service。
什么是 REST?
六条设计规范定义了一个 REST 系统的特点:
客户端-服务器: 客户端和服务器之间隔离,服务器提供服务,客户端进行消费。
无状态: 从客户端到服务器的每个请求都必须包含理解请求所必需的信息。换句话说, 服务器不会存储客户端上一次请求的信息用来给下一次使用。
可缓存: 服务器必须明示客户端请求能否缓存。
分层系统: 客户端和服务器之间的通信应该以一种标准的方式,就是中间层代替服务器做出响应的时候,客户端不需要做任何变动。
统一的接口: 服务器和客户端的通信方法必须是统一的。
按需编码: 服务器可以提供可执行代码或脚本,为客户端在它们的环境中执行。这个约束是唯一一个是可选的。
- ========== ===================== ==================================
- 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
- ========== ====================== ==================================
- ========== =============================================== =============================
- 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: 任务完成的状态。布尔值。
- $ 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/bin/pythonfrom flask import Flaskapp = Flask(__name__)@app.route('/')def index():
- return "Hello, World!"if __name__ == '__main__':
- app.run(debug=True)
- $ chmod a+x app.py
- $ ./app.py
- * Running on http://127.0.0.1:5000/
- * Restarting with reloader
- #!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)
- $ 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"
- }
- ]
- }
- from flask import [email protected]('/todo/api/v1.0/tasks/<int: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]})
- $ 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">
- <title>404 Not Found</title>
- <h1>Not Found</h1>
- <p>The requested URL was not found on the server.</p><p>If you entered the URL manually please check your spelling and try again.</p>
- from flask import [email protected](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"
- }
- from flask import [email protected]('/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
- $ 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"
- }
- }
- 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/tasks/<int: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)
什么是一个 RESTful 的 web service?
REST 架构的最初目的是适应万维网的 HTTP 协议。
RESTful web services 概念的核心就是“资源”。 资源可以用URI来表示。客户端使用 HTTP 协议定义的方法来发送请求到这些 URIs,当然可能会导致这些被访问的”资源“状态的改变。
HTTP 标准的方法有如下:
REST 设计不需要特定的数据格式。在请求中数据可以以JSON形式, 或者有时候作为 url 中查询参数项。
设计一个简单的 web service
坚持 REST 的准则设计一个 web service 或者 API 的任务就变成一个标识资源被展示出来以及它们是怎样受不同的请求方法影响的练习。
比如说,我们要编写一个待办事项应用程序而且我们想要为它设计一个 web service。要做的第一件事情就是决定用什么样的根 URL 来访问该服务。例如,我们可以通过这个来访问:
http://[hostname]/todo/api/v1.0/
在这里我已经决定在 URL 中包含应用的名称以及 API 的版本号。在 URL 中包含应用名称有助于提供一个命名空间以便区分同一系统上的其它服务。在 URL 中包含版本号能够帮助以后的更新,如果新版本中存在新的和潜在不兼容的功能,可以不影响依赖于较旧的功能的应用程序。
下一步骤就是选择将由该服务暴露(展示)的资源。这是一个十分简单地应用,我们只有任务,因此在我们待办事项中唯一的资源就是任务。
我们的任务资源将要使用 HTTP 方法如下:
我们定义的任务有如下一些属性:
目前为止关于我们的 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上下载:
既然已经安装了 Flask,现在开始创建一个简单地网页应用,我们把它放在一个叫 app.py 的文件中:
为了运行这个程序我们必须执行 app.py:
现在你可以启动你的网页浏览器,输入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 的第一个入口:
正如你所见,没有多大的变化。我们创建一个任务的内存数据库,这里无非就是一个字典和数组。数组中的每一个元素都具有上述定义的任务的属性。
取代了首页,我们现在拥有一个 get_tasks 的函数,访问的 URI 为 /todo/api/v1.0/tasks,并且只允许 GET 的 HTTP 方法。
这个函数的响应不是文本,我们使用 JSON 数据格式来响应,Flask 的 jsonify 函数从我们的数据结构中生成。
使用网页浏览器来测试我们的 web service 不是一个最好的注意,因为网页浏览器上不能轻易地模拟所有的 HTTP 请求的方法。相反,我们会使用 curl。如果你还没有安装 curl 的话,请立即安装它。
通过执行 app.py,启动 web service。接着打开一个新的控制台窗口,运行以下命令:
我们已经成功地调用我们的 RESTful service 的一个函数!
现在我们开始编写 GET 方法请求我们的任务资源的第二个版本。这是一个用来返回单独一个任务的函数:
第二个函数有些意思。这里我们得到了 URL 中任务的 id,接着 Flask 把它转换成 函数中的 task_id 的参数。
我们用这个参数来搜索我们的任务数组。如果我们的数据库中不存在搜索的 id,我们将会返回一个类似 404 的错误,根据 HTTP 规范的意思是 “资源未找到”。
如果我们找到相应的任务,那么我们只需将它用 jsonify 打包成 JSON 格式并将其发送作为响应,就像我们以前那样处理整个任务集合。
调用 curl 请求的结果如下:
当我们请求 id #2 的资源时候,我们获取到了,但是当我们请求 #3 的时候返回了 404 错误。有关错误奇怪的是返回的是 HTML 信息而不是 JSON,这是因为 Flask 按照默认方式生成 404 响应。由于这是一个 Web service 客户端希望我们总是以 JSON 格式回应,所以我们需要改善我们的 404 错误处理程序:
我们会得到一个友好的错误提示:
接下来就是 POST 方法,我们用来在我们的任务数据库中插入一个新的任务:
添加一个新的任务也是相当容易地。只有当请求以 JSON 格式形式,request.json 才会有请求的数据。如果没有数据,或者存在数据但是缺少 title 项,我们将会返回 400,这是表示请求无效。
接着我们会创建一个新的任务字典,使用最后一个任务的 id + 1 作为该任务的 id。我们允许 description 字段缺失,并且假设 done 字段设置成 False。
我们把新的任务添加到我们的任务数组中,并且把新添加的任务和状态 201 响应给客户端。
使用如下的 curl 命令来测试这个新的函数:
注意:如果你在 Windows 上并且运行 Cygwin 版本的 curl,上面的命令不会有任何问题。然而,如果你使用原生的 curl,命令会有些不同:
当然在完成这个请求后,我们可以得到任务的更新列表:
剩下的两个函数如下所示:
‘陆’ 如何获取python模块的api
一:用C API为Python写C语言函数,以方便Python中调用 1. 首先实现一个特定原型的函数,用Python C API来实现的话,所有函数必须是这种原型。必须是类似这样的 PyObject *Fun(PyObject *self, PyObject *args) self应该是在用类的时候才会用到
‘柒’ Python怎么导入gm.api模块
1.将依赖包目录放置到*:\Python*\Lib\site-packages\中,即python的安装目录中。 首先确定API目录下是否有__init__.py文件,如果没有,请新建一个。
2.打开API主运行文件,查看里面的类名称。此处为main.py文件,类为class dcVerCode。
3.此处以导入main中的类dcVerCode为例。 打开__init__.py,输入: from main import dcVerCode 这样就完成了依赖包的指定。
4. 运行环境:Python 2.6 - 2.7 依赖:无任何依赖。安装:pip install sinaweibopy
‘捌’ 如何用python 快速做出一个api服务
python 轻量级的框架flask
可以让你在两分钟内,搭建出一个简单的
api接口服务
轻量级不代表功能简单,容易上手
它的优势是,模块化,易扩展,定制性强
比如:一个最简单api接口2 分钟搞定
加入你需要加入登录验证功能
加入页面跳转功能呢
如果想要渲染加载前段页面呢
flask框里有你意想不到的插件,让你完成最够强大
的功能,怎么样,赶紧来试试吧
‘玖’ Python数据库API(DB API)
虽然 Python 需要为操作不同的数据库使用不同的模块,但不同的数据库模块并非没有规律可循,因为它们基本都遵守 Python 制订的 DB API 协议,目前该协议的最新版本是 2.0,因此这些数据库模块有很多操作其实都是相同的。下面先介绍不同数据库模块之间的通用内容。
全局变量
Python 推荐支持 DB API 2.0 的数据库模块都应该提供如下 3 个全局变量:
apilevel:该全局变量显示数据库模块的 API 版本号。对于支持 DB API 2.0 版本的数据库模块来说,该变量值通常就是 2.0。如果这个变量不存在,则可能该数据库模块暂时不支持 DB API 2.0。读者应该考虑选择使用支持该数据库的其他数据库模块。
threadsafety:该全局变量指定数据库模块的线程安全等级,该等级值为 0~3 ,其中 3 代表该模块完全是线程安全的;1 表示该模块具有部分线程安全性,线程可以共享该模块,但不能共享连接;0 则表示线程完全不能共享该模块。
paramstyle:该全局变量指定当 sql 语句需要参数时,可以使用哪种风格的参数。该变量可能返回如下变量值:
format:表示在 SQL 语句中使用 Python 标准的格式化字符串代表参数。例如,在程序中需要参数的地方使用 %s,接下来程序即可为这些参数指定参数值。
pyformat:表示在 SQL 语句中使用扩展的格式代码代表参数。比如使用 %(name),这样即可使用包含 key 为 name 的字典为该参数指定参数值。
qmark:表示在 SQL 语句中使用问号(?)代表参数。在 SQL 语句中有几个参数,全部用问号代替。
numeric:表示在 SQL 语句中使用数字占位符(:N)代表参数。例如:1 代表一个参数,:2 也表示一个参数,这些数字相当于参数名,因此它们不一定需要连续。
named:表示在 SQL 语句中使用命名占位符(:name)代表参数。例如 :name 代表一个参数,:age 也表示一个参数。
通过查阅这些全局变量,即可大致了解该数据库 API 模块的对外的编程风格,至于该模块内部的实现细节,完全由该模块实现者负责提供,通常不需要开发者关心。
数据库 API 的核心类
遵守 DB API 2.0 协议的数据库模块通常会提供一个 connect() 函数,该函数用于连接数据库,并返回数据库连接对象。
数据库连接对象通常会具有如下方法和属性:
cursor(factory=Cursor):打开游标。
commit():提交事务。
rollback():回滚事务。
close():关闭数据库连接。
isolation_level:返回或设置数据库连接中事务的隔离级别。
in_transaction:判断当前是否处于事务中。
上面第一个方法可以返回一个游标对象,游标对象是 Python DB API 的核心对象,该对象主要用于执行各种 SQL 语句,包括 DDL、DML、select 查询语句等。使用游标执行不同的 SQL 语句返回不同的数据。
游标对象通常会具有如下方法和属性:
execute(sql[, parameters]):执行 SQL 语句。parameters 参数用于为 SQL 语句中的参数指定值。
executemany(sql, seq_of_parameters):重复执行 SQL 语句。可以通过 seq_of_parameters 序列为 SQL 语句中的参数指定值,该序列有多少个元素,SQL 语句被执行多少次。
executescript(sql_script):这不是 DB API 2.0 的标准方法。该方法可以直接执行包含多条 SQL 语句的 SQL 脚本。
fetchone():获取查询结果集的下一行。如果没有下一行,则返回 None。
fetchmany(size=cursor.arraysize):返回查询结果集的下 N 行组成的列表。如果没有更多的数据行,则返回空列表。
fetchall():返回查询结果集的全部行组成的列表。
close():关闭游标。
rowcount:该只读属性返回受 SQL 语句影响的行数。对于 executemany() 方法,该方法所修改的记录条数也可通过该属性获取。
lastrowid:该只读属性可获取最后修改行的 rowid。
arraysize:用于设置或获取 fetchmany() 默认获取的记录条数,该属性默认为 1。有些数据库模块没有该属性。
description:该只读属性可获取最后一次查询返回的所有列的信息。
connection:该只读属性返回创建游标的数据库连接对象。有些数据库模块没有该属性。
总结来看,Python 的 DB API 2.0 由一个 connect() 开始,一共涉及数据库连接和游标两个核心 API。它们的分工如下:
数据库连接:用于获取游标、控制事务。
游标:执行各种 SQL 语句。
掌握了上面这些 API 之后,接下来可以大致归纳出 Python DB API 2.0 的编程步骤。
操作数据库的基本流程
使用 Python DB API 2.0 操作数据库的基本流程如下:
调用 connect() 方法打开数据库连接,该方法返回数据库连接对象。
通过数据库连接对象打开游标。
使用游标执行 SQL 语句(包括 DDL、DML、select 查询语句等)。如果执行的是查询语句,则处理查询数据。
关闭游标。
关闭数据库连接。
下图显示了使用 Python DB API 2.0 操作数据库的基本流程。