$微信小程序开发实践点滴——Bmob基本REST API的python封装
Refer:Bmob后端云REST API接口文档:http://docs.bmob.cn/data/Restful/a_faststart/doc/index.html
本文使用python对Bmob REST API的基本增删改查接口进行封装,方便在小程序开发时批量插入原始数据。
常用操作函数封装
#!/usr/bin/python
# coding:utf-8
# Bmob后端云基本REST API封装
import requests
import json
# 每个应用都会有这两个ID,以下方法如果不传入这两个参数,那么使用这里默认的值
APP_ID = 'XXX'
REST_API_KEY = 'XXX'
# 封装rest api的get方法,根据对象ID获取一条数据
# table_name:要查询的表名
# object_id:要查询的数据记录的ID
def query(table_name,object_id,app_id = APP_ID,rest_api_key = REST_API_KEY):
# 构建请求头
headers = {}
headers['X-Bmob-Application-Id'] = app_id
headers['X-Bmob-REST-API-Key'] = rest_api_key
# 构建url
url = 'https://api.bmob.cn/1/classes/{table_name}/{object_id}'.format(table_name = table_name,object_id = object_id)
# 发起请求
resp = requests.get(url,headers = headers,verify = False)
# 设置响应体编码
resp.encoding = 'utf-8'
if resp and resp.status_code == 200:
return json.loads(resp.text)
return None
# 封装rest api的post方法,插入一条记录
# table_name:表名,如果表名还不存在,则先创建一个表再插入数据
# data:字典,要插入的记录的各个字段的字段名和值
def insert(table_name,data,app_id = APP_ID,rest_api_key = REST_API_KEY):
# 构建请求头
headers = {}
headers['X-Bmob-Application-Id'] = app_id
headers['X-Bmob-REST-API-Key'] = rest_api_key
headers['Content-Type'] = 'application/json'
# 构建url
url = 'https://api.bmob.cn/1/classes/{table_name}'.format(table_name = table_name)
# 发起请求
resp = requests.post(url,headers = headers,data = json.dumps(data),verify = False)
# 设置响应体编码
resp.encoding = 'utf-8'
if resp and resp.status_code == 201:
print 'insert success!'
return json.loads(resp.text)
return None
# 封装rest api的put方法,传入记录ID,修改一条数据
# table_name:要更新的表名
# object_id:要更新的数据记录的ID
# data:字典类型,要更新的数据的键值对
def update(table_name,object_id,data,app_id = APP_ID,rest_api_key = REST_API_KEY):
# 构建请求头
headers = {}
headers['X-Bmob-Application-Id'] = app_id
headers['X-Bmob-REST-API-Key'] = rest_api_key
headers['Content-Type'] = 'application/json'
# 构建url
url = 'https://api.bmob.cn/1/classes/{table_name}/{object_id}'.format(table_name = table_name,object_id = object_id)
# 发起请求
resp = requests.put(url,headers = headers,data = json.dumps(data),verify = False)
# 设置响应体编码
resp.encoding = 'utf-8'
if resp and resp.status_code == 200:
print 'update {0} success!'.format(object_id)
return json.loads(resp.text)
return None
# 封装rest api的delete方法,根据对象ID删除一条记录
# table_name:要删除的记录所在的表名
# object_id:要删除的数据记录的ID
def delete(table_name,object_id,app_id = APP_ID,rest_api_key = REST_API_KEY):
# 构建请求头
headers = {}
headers['X-Bmob-Application-Id'] = app_id
headers['X-Bmob-REST-API-Key'] = rest_api_key
# 构建url
url = 'https://api.bmob.cn/1/classes/{table_name}/{object_id}'.format(table_name = table_name,object_id = object_id)
# 发起请求
resp = requests.delete(url,headers = headers,verify = False)
# 设置响应体编码
resp.encoding = 'utf-8'
if resp and resp.status_code == 200:
print 'delete {0} success!'.format(object_id)
return json.loads(resp.text)
return None
# 查询一个表中的所有数据
# table_name:要查询的表名
def list(table_name,app_id = APP_ID,rest_api_key = REST_API_KEY):
# 构建请求头
headers = {}
headers['X-Bmob-Application-Id'] = app_id
headers['X-Bmob-REST-API-Key'] = rest_api_key
# 构建url
url = 'https://api.bmob.cn/1/classes/{table_name}'.format(table_name = table_name)
# 发起请求
resp = requests.get(url,headers = headers,verify = False)
# 设置响应体编码
resp.encoding = 'utf-8'
if resp and resp.status_code == 200:
return json.loads(resp.text)['results']
return None
# 批量操作:批量创建
# request_data结构:
'''
table_name = 'test'
{
"requests":[
{
"method":"POST",
"path":"/1/classes/{0}".format(table_name),
"body":{
"name":"Tom",
"age":18
}
},
{
"method":"POST",
"path":"/1/classes/{0}".format(table_name),
"body":{
"name":"John",
"age":21
}
}
]
}
'''
def batch_insert(request_data,app_id = APP_ID,rest_api_key = REST_API_KEY):
# 构建请求头
headers = {}
headers['X-Bmob-Application-Id'] = app_id
headers['X-Bmob-REST-API-Key'] = rest_api_key
headers['Content-Type'] = 'application/json'
# url
url = 'https://api.bmob.cn/1/batch'
# 发起请求
resp = requests.post(url,data = json.dumps(request_data),headers = headers,verify = False)
# 设置响应体编码
resp.encoding = 'utf-8'
if resp and resp.status_code == 200:
return json.loads(resp.text)
return None
调用示例
#!/usr/bin/python
# coding:utf-8
# 测试工具方法的使用
import bmob_base_utils as utils
def main():
# 测试query方法
#resp = utils.query(table_name = 'monthly', object_id = '2290ce60cc')
#print resp
# 测试insert方法
'''
data = {'name':'Ben','age':18}
resp = utils.insert(table_name = 'test',data = data)
print resp
'''
# 测试update方法
#data = {'age':999}
#utils.update(table_name = 'test',object_id = '79cfd8639b',data = data)
# 测试delete方法
#utils.delete(table_name = 'test', object_id = '79cfd8639b')
# 测试list方法
# print utils.list('test')
# 测试batch_insert方法
request_data = {}
request_data['requests'] = []
table_name = 'test'
data1 = {
"method":"POST",
"path":"/1/classes/{0}".format(table_name),
"body":{
"name":"Tom",
"age":18
}
}
data2 = {
"method":"POST",
"path":"/1/classes/{0}".format(table_name),
"body":{
"name":"John",
"age":21
}
}
request_data['requests'].append(data1)
request_data['requests'].append(data2)
utils.batch_insert(request_data)
if __name__ == '__main__':
main()
补充
查询成功响应:200 OK
创建成功响应:201 Created
更新成功响应:200 OK
删除成功响应:200 OK
随机推荐
- 谈谈对XML的理解?说明Web应用中Web.xml文件的作用?
谈谈对XML的理解?说明Web应用中Web.xml文件的作用? 解答:XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard ...
- 嵌入式开发之信号采集同步---VSYNC和HSYNC的作用以及它们两者之间的关系
VSYNC和HSYNC的作用以及它们两者之间的关系 VSYNC和HSYNC的作用以及它们两者之间的关系 VSYNC和HSYNC是什么 VSYNC: vertical synchronization,指 ...
- redhat ent6.5使用centos yum
转载自:http://blog.csdn.net/zhngjan/article/details/20843465 搜狐镜像库:mirrors.sohu.com 163镜像库:mirrors.163. ...
- Cocos2d-x 3.3Bate0 ExpandedListView
之前写的ExpandedListView版本号因为版本号升级这里提供Cocos2d-x 3.3Bate0 版本号 代码下载:http://download.csdn.net/detail/qqmcy/ ...
- darknet(yolov2)移植到caffe框架
yolov2到caffe的移植主要分两个步骤:一.cfg,weights转换为prototxt,caffemodel1.下载源码:git clone https://github.com/marvis ...
- FBV和CBV的差异
FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV CBV(class base ...
- 修改project任务的默认开始时间
一般情况下,在project新建一个项目之后,在这个项目里每新添加一个任务,它的默认开始时间都是取的本项目的创建时间.但这可能并不是我们所需要的. 其实在这里,project取的默认开始时间都是整个项 ...
- 【BZOJ4566】[Haoi2016]找相同字符 后缀数组+单调栈
[BZOJ4566][Haoi2016]找相同字符 Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两 个子串中有一个位置不同 ...
- java读取项目资源文件的方法
1.把资源文件放在项目的Resource文件夹下,并使其设置成为资源文件夹(通过idea或者eclise)2. Thread.currentThread().getContextClassLoader ...
- Centos6.5下DHCP服务器的安装和配置
1.首先需要安装DHCP的软件包,使用yum进行安装 # yum install -y dhcp.x86_64 dhcp-devel.x86_64 2.将/usr/share/doc/dhcp-4. ...