$微信小程序开发实践点滴——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
随机推荐
- python笔记2-数据类型:元组、字典常用操作
元组 Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. tp=(1,2,3,'a','b' ...
- Windows下通过Composer安装Yii2
安装好大于5.4或更高版本的PHP环境并开启openssl扩展.如果是Apache服务器,加载Apache的mod_ssl模块. 下载Composer并安装. 开始->运行[或者WIN+R]-& ...
- poj 3680(最小费用最大流)
题目链接:http://poj.org/problem?id=3680 思路:因为N<=200,而区间范围为[1,100000],因此需要离散化,去重,然后就是建图了相连两点连边,容量为k,费用 ...
- WPF界面框架的设计
http://www.cnblogs.com/baihmpgy/p/osgi_muinavtree_fx.html
- JavaScript------一元运算符+的使用
var y = "5"; // y 是一个字符串 var x = + y; // x 是一个数字 var y = "John"; // y 是一个字符串 var ...
- 59、常规控件(2)TextInputLayout-让EditText提示更加人性化
提示语用在显示. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" andro ...
- 红黑树C++实现
1 /* 2 * rbtree.h 3 * 1. 每个节点是红色或者黑色 4 * 2. 根节点是黑色 5 * 3. 每个叶子节点是黑色(该叶子节点就空的节点) 6 * 4. 如果一个节点是红色,则它的 ...
- cxGrid 使用指南 1
1:cxgrid是应该数据关联的控件,类似dbgrid.2:一般用来查阅表信息,如果要修改的话,直接在上面编辑或添加 非常不方便通常要放几个EDit来对选中的记录进行编辑或添加记录. 因为表一般都有主 ...
- 《从零开始学Swift》学习笔记(Day 58)—— Swift编码规范之变量或常量声明规范
原创文章,欢迎转载.转载请注明:关东升的博客 声明是在声明变量.常量.属性.方法或函数和自定义类型时候需要遵守的规范. 首先变量或常量时每行声明变量或常量的数量推荐一行一个,因为这样以利于写注释.示例 ...
- 160726、jQuery常用操作
一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库. jQuery对象 jQuery产 ...