Refer:Bmob后端云REST API接口文档:http://docs.bmob.cn/data/Restful/a_faststart/doc/index.html

本文使用python对Bmob REST API的基本增删改查接口进行封装,方便在小程序开发时批量插入原始数据。

常用操作函数封装

  1. #!/usr/bin/python
  2. # coding:utf-8
  3. # Bmob后端云基本REST API封装
  4. import requests
  5. import json
  6. # 每个应用都会有这两个ID,以下方法如果不传入这两个参数,那么使用这里默认的值
  7. APP_ID = 'XXX'
  8. REST_API_KEY = 'XXX'
  9. # 封装rest api的get方法,根据对象ID获取一条数据
  10. # table_name:要查询的表名
  11. # object_id:要查询的数据记录的ID
  12. def query(table_name,object_id,app_id = APP_ID,rest_api_key = REST_API_KEY):
  13. # 构建请求头
  14. headers = {}
  15. headers['X-Bmob-Application-Id'] = app_id
  16. headers['X-Bmob-REST-API-Key'] = rest_api_key
  17. # 构建url
  18. url = 'https://api.bmob.cn/1/classes/{table_name}/{object_id}'.format(table_name = table_name,object_id = object_id)
  19. # 发起请求
  20. resp = requests.get(url,headers = headers,verify = False)
  21. # 设置响应体编码
  22. resp.encoding = 'utf-8'
  23. if resp and resp.status_code == 200:
  24. return json.loads(resp.text)
  25. return None
  26. # 封装rest api的post方法,插入一条记录
  27. # table_name:表名,如果表名还不存在,则先创建一个表再插入数据
  28. # data:字典,要插入的记录的各个字段的字段名和值
  29. def insert(table_name,data,app_id = APP_ID,rest_api_key = REST_API_KEY):
  30. # 构建请求头
  31. headers = {}
  32. headers['X-Bmob-Application-Id'] = app_id
  33. headers['X-Bmob-REST-API-Key'] = rest_api_key
  34. headers['Content-Type'] = 'application/json'
  35. # 构建url
  36. url = 'https://api.bmob.cn/1/classes/{table_name}'.format(table_name = table_name)
  37. # 发起请求
  38. resp = requests.post(url,headers = headers,data = json.dumps(data),verify = False)
  39. # 设置响应体编码
  40. resp.encoding = 'utf-8'
  41. if resp and resp.status_code == 201:
  42. print 'insert success!'
  43. return json.loads(resp.text)
  44. return None
  45. # 封装rest api的put方法,传入记录ID,修改一条数据
  46. # table_name:要更新的表名
  47. # object_id:要更新的数据记录的ID
  48. # data:字典类型,要更新的数据的键值对
  49. def update(table_name,object_id,data,app_id = APP_ID,rest_api_key = REST_API_KEY):
  50. # 构建请求头
  51. headers = {}
  52. headers['X-Bmob-Application-Id'] = app_id
  53. headers['X-Bmob-REST-API-Key'] = rest_api_key
  54. headers['Content-Type'] = 'application/json'
  55. # 构建url
  56. url = 'https://api.bmob.cn/1/classes/{table_name}/{object_id}'.format(table_name = table_name,object_id = object_id)
  57. # 发起请求
  58. resp = requests.put(url,headers = headers,data = json.dumps(data),verify = False)
  59. # 设置响应体编码
  60. resp.encoding = 'utf-8'
  61. if resp and resp.status_code == 200:
  62. print 'update {0} success!'.format(object_id)
  63. return json.loads(resp.text)
  64. return None
  65. # 封装rest api的delete方法,根据对象ID删除一条记录
  66. # table_name:要删除的记录所在的表名
  67. # object_id:要删除的数据记录的ID
  68. def delete(table_name,object_id,app_id = APP_ID,rest_api_key = REST_API_KEY):
  69. # 构建请求头
  70. headers = {}
  71. headers['X-Bmob-Application-Id'] = app_id
  72. headers['X-Bmob-REST-API-Key'] = rest_api_key
  73. # 构建url
  74. url = 'https://api.bmob.cn/1/classes/{table_name}/{object_id}'.format(table_name = table_name,object_id = object_id)
  75. # 发起请求
  76. resp = requests.delete(url,headers = headers,verify = False)
  77. # 设置响应体编码
  78. resp.encoding = 'utf-8'
  79. if resp and resp.status_code == 200:
  80. print 'delete {0} success!'.format(object_id)
  81. return json.loads(resp.text)
  82. return None
  83. # 查询一个表中的所有数据
  84. # table_name:要查询的表名
  85. def list(table_name,app_id = APP_ID,rest_api_key = REST_API_KEY):
  86. # 构建请求头
  87. headers = {}
  88. headers['X-Bmob-Application-Id'] = app_id
  89. headers['X-Bmob-REST-API-Key'] = rest_api_key
  90. # 构建url
  91. url = 'https://api.bmob.cn/1/classes/{table_name}'.format(table_name = table_name)
  92. # 发起请求
  93. resp = requests.get(url,headers = headers,verify = False)
  94. # 设置响应体编码
  95. resp.encoding = 'utf-8'
  96. if resp and resp.status_code == 200:
  97. return json.loads(resp.text)['results']
  98. return None
  99. # 批量操作:批量创建
  100. # request_data结构:
  101. '''
  102. table_name = 'test'
  103. {
  104. "requests":[
  105. {
  106. "method":"POST",
  107. "path":"/1/classes/{0}".format(table_name),
  108. "body":{
  109. "name":"Tom",
  110. "age":18
  111. }
  112. },
  113. {
  114. "method":"POST",
  115. "path":"/1/classes/{0}".format(table_name),
  116. "body":{
  117. "name":"John",
  118. "age":21
  119. }
  120. }
  121. ]
  122. }
  123. '''
  124. def batch_insert(request_data,app_id = APP_ID,rest_api_key = REST_API_KEY):
  125. # 构建请求头
  126. headers = {}
  127. headers['X-Bmob-Application-Id'] = app_id
  128. headers['X-Bmob-REST-API-Key'] = rest_api_key
  129. headers['Content-Type'] = 'application/json'
  130. # url
  131. url = 'https://api.bmob.cn/1/batch'
  132. # 发起请求
  133. resp = requests.post(url,data = json.dumps(request_data),headers = headers,verify = False)
  134. # 设置响应体编码
  135. resp.encoding = 'utf-8'
  136. if resp and resp.status_code == 200:
  137. return json.loads(resp.text)
  138. return None

调用示例

  1. #!/usr/bin/python
  2. # coding:utf-8
  3. # 测试工具方法的使用
  4. import bmob_base_utils as utils
  5. def main():
  6. # 测试query方法
  7. #resp = utils.query(table_name = 'monthly', object_id = '2290ce60cc')
  8. #print resp
  9. # 测试insert方法
  10. '''
  11. data = {'name':'Ben','age':18}
  12. resp = utils.insert(table_name = 'test',data = data)
  13. print resp
  14. '''
  15. # 测试update方法
  16. #data = {'age':999}
  17. #utils.update(table_name = 'test',object_id = '79cfd8639b',data = data)
  18. # 测试delete方法
  19. #utils.delete(table_name = 'test', object_id = '79cfd8639b')
  20. # 测试list方法
  21. # print utils.list('test')
  22. # 测试batch_insert方法
  23. request_data = {}
  24. request_data['requests'] = []
  25. table_name = 'test'
  26. data1 = {
  27. "method":"POST",
  28. "path":"/1/classes/{0}".format(table_name),
  29. "body":{
  30. "name":"Tom",
  31. "age":18
  32. }
  33. }
  34. data2 = {
  35. "method":"POST",
  36. "path":"/1/classes/{0}".format(table_name),
  37. "body":{
  38. "name":"John",
  39. "age":21
  40. }
  41. }
  42. request_data['requests'].append(data1)
  43. request_data['requests'].append(data2)
  44. utils.batch_insert(request_data)
  45. if __name__ == '__main__':
  46. main()

补充

  • 查询成功响应:200 OK

  • 创建成功响应:201 Created

  • 更新成功响应:200 OK

  • 删除成功响应:200 OK

随机推荐

  1. .htaccess伪静态实例分享

    首先配置服务器启动重写模块打开 Apache 的配置文件 httpd.conf .将#LoadModule rewrite_module modules/mod_rewrite前面的#去掉.保存后重启 ...

  2. 基于虚拟数据的行人检测研究(Expecting the Unexpected: Training Detectors for Unusual Pedestrians with Adversarial Imposters)

    Paper Link : https://arxiv.org/pdf/1703.06283 Github: https://github.com/huangshiyu13/RPNplus 摘要: 这篇 ...

  3. 要生成一个窗口,通常使用Window的子类Frame类进行实例化

    要生成一个窗口,通常使用Window的子类Frame类进行实例化,而不是直接使用Window 类,框架的外观就像平常Windows系统下的窗口,有标题.边框. 菜单 和大小等. setSize()方法 ...

  4. eclipse 下安装 lombok.jar

    lombok是一个java 开发插件,可以用来简化代码, 1. 下载lombok.jar https://projectlombok.org/download 2 将lombok.jar文件放在ecl ...

  5. jQuery学习笔记1——操作属性

    一.获得和设置内容 三个简单实用的用于 DOM 操作的 jQuery 方法: text() - 设置或返回所选元素的文本内容, 得到匹配元素集合中每个元素的文本内容结合,包括他们的后代, 即由所有匹配 ...

  6. Accept-Encoding 使用

    [总结] 想要获得正确网页内容,而非乱码的话,就有两种方式了: 1.不要设置Accept-Encoding的Header //req.Headers.Add("Accept-Encoding ...

  7. 《Start Developing iOS Apps Today》摘抄

    原文:<Start Developing iOS Apps Today> Review the Source Code 入口函数main.m #import <UIKit/UIKit ...

  8. mysql_real_connect 端口号说明

    mysql_real_connect语法:  C++ Code  12345678   MYSQL * mysql_real_connect(MYSQL * mysql,                ...

  9. python中的self

    1.首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的.self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数. self名称不是必须的,在python中se ...

  10. HDU 5157 Harry and magic string(回文树)

    Harry and magic string Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...