# -*- coding: UTF-8 -*-
# Copyright (c) 2014 The CCP project authors. All Rights Reserved.
#
# Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license
# that can be found in the LICENSE file in the root of the web site.
#
# http://www.yuntongxun.com
#
# An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
from hashlib import md5
import base64
import datetime
from urllib import request as urllib2
import json
from .xmltojson import xmltojson
class REST:
AccountSid = ''
AccountToken = ''
AppId = ''
SubAccountSid = ''
SubAccountToken = ''
ServerIP = ''
ServerPort = ''
SoftVersion = ''
Iflog = False # 是否打印日志
Batch = '' # 时间戳
BodyType = 'xml' # 包体格式,可填值:json 、xml
# 初始化
# @param serverIP 必选参数 服务器地址
# @param serverPort 必选参数 服务器端口
# @param softVersion 必选参数 REST版本号
def __init__(self, ServerIP, ServerPort, SoftVersion):
self.ServerIP = ServerIP
self.ServerPort = ServerPort
self.SoftVersion = SoftVersion
# 设置主帐号
# @param AccountSid 必选参数 主帐号
# @param AccountToken 必选参数 主帐号Token
def setAccount(self, AccountSid, AccountToken):
self.AccountSid = AccountSid
self.AccountToken = AccountToken
# 设置子帐号
#
# @param SubAccountSid 必选参数 子帐号
# @param SubAccountToken 必选参数 子帐号Token
def setSubAccount(self, SubAccountSid, SubAccountToken):
self.SubAccountSid = SubAccountSid
self.SubAccountToken = SubAccountToken
# 设置应用ID
#
# @param AppId 必选参数 应用ID
def setAppId(self, AppId):
self.AppId = AppId
def log(self, url, body, data):
print('这是请求的URL:')
print(url)
print('这是请求包体:')
print(body)
print('这是响应包体:')
print(data)
print('********************************')
# 创建子账号
# @param friendlyName 必选参数 子帐号名称
def CreateSubAccount(self, friendlyName):
self.accAuth()
nowdate = datetime.datetime.now()
self.Batch = nowdate.strftime("%Y%m%d%H%M%S")
# 生成sig
signature = self.AccountSid + self.AccountToken + self.Batch
sig = md5(signature.encode()).hexdigest().upper()
# 拼接URL
url = "https://" + self.ServerIP + ":" + self.ServerPort + "/" + self.SoftVersion + "/Accounts/" + self.AccountSid + "/SubAccounts?sig=" + sig
# 生成auth
src = self.AccountSid + ":" + self.Batch
auth = base64.encodebytes(src.encode()).decode().strip()
req = urllib2.Request(url)
self.setHttpHeader(req)
req.add_header("Authorization", auth)
# xml格式
body = '''<?xml version="1.0" encoding="utf-8"?><SubAccount><appId>%s</appId>\
<friendlyName>%s</friendlyName>\
</SubAccount>\
''' % (self.AppId, friendlyName)
if self.BodyType == 'json':
# json格式
body = '''{"friendlyName": "%s", "appId": "%s"}''' % (friendlyName, self.AppId)
data = ''
req.data = body.encode()
try:
res = urllib2.urlopen(req)
data = res.read()
res.close()
if self.BodyType == 'json':
# json格式
locations = json.loads(data)
else:
# xml格式
xtj = xmltojson()
locations = xtj.main(data)
if self.Iflog:
self.log(url, body, data)
return locations
except Exception as error:
if self.Iflog:
self.log(url, body, data)
return {'172001': '网络错误'}
# 获取子帐号
# @param startNo 可选参数 开始的序号,默认从0开始
# @param offset 可选参数 一次查询的最大条数,最小是1条,最大是100条
def getSubAccounts(self, startNo, offset):
self.accAuth()
nowdate = datetime.datetime.now()
self.Batch = nowdate.strftime("%Y%m%d%H%M%S")
# 生成sig
signature = self.AccountSid + self.AccountToken + self.Batch
sig = md5(signature.encode()).hexdigest().upper()
# 拼接URL
url = "https://" + self.ServerIP + ":" + self.ServerPort + "/" + self.SoftVersion + "/Accounts/" + self.AccountSid + "/GetSubAccounts?sig=" + sig
# 生成auth
src = self.AccountSid + ":" + self.Batch
# auth = base64.encodestring(src).strip()
auth = base64.encodebytes(src.encode()).decode().strip()
req = urllib2.Request(url)
self.setHttpHeader(req)
req.add_header("Authorization", auth)
# xml格式
body = '''<?xml version="1.0" encoding="utf-8"?><SubAccount><appId>%s</appId>\
<startNo>%s</startNo><offset>%s</offset>\
</SubAccount>\
''' % (self.AppId, startNo, offset)
if self.BodyType == 'json':
# json格式
body = '''{"appId": "%s", "startNo": "%s", "offset": "%s"}''' % (self.AppId, startNo, offset)
data = ''
req.data = body.encode()
try:
res = urllib2.urlopen(req)
data = res.read()
res.close()
if self.BodyType == 'json':
# json格式
locations = json.loads(data)
else:
# xml格式
xtj = xmltojson()
locations = xtj.main(data)
if self.Iflog:
self.log(url, body, data)
return locations
except Exception as error:
if self.Iflog:
self.log(url, body, data)
return {'172001': '网络错误'}
# 子帐号信息查询
# @param friendlyName 必选参数 子帐号名称
def querySubAccount(self, friendlyName):
self.accAuth()
nowdate = datetime.datetime.now()
self.Batch = nowdate.strftime("%Y%m%d%H%M%S")
# 生成sig
signature = self.AccountSid + self.AccountToken + self.Batch
sig = md5(signature.encode()).hexdigest().upper()
# 拼接URL
url = "https://" + self.ServerIP + ":" + self.ServerPort + "/" + self.SoftVersion + "/Accounts/" + self.AccountSid + "/QuerySubAccountByName?sig=" + sig
# 生成auth
src = self.AccountSid + ":" + self.Batch
# auth = base64.encodestring(src).strip()
auth = base64.encodebytes(src.encode()).decode().strip()
req = urllib2.Request(url)
self.setHttpHeader(req)
req.add_header("Authorization", auth)
# 创建包体
body = '''<?xml version="1.0" encoding="utf-8"?><SubAccount><appId>%s</appId>\
<friendlyName>%s</friendlyName>\
</SubAccount>\
''' % (self.AppId, friendlyName)
if self.BodyType == 'json':
body = '''{"friendlyName": "%s", "appId": "%s"}''' % (friendlyName, self.AppId)
data = ''
req.data = body.encode()
try:
res = urllib2.urlopen(req)
data = res.read()
res.close()
if self.BodyType == 'json':
# json格式
locations = json.loads(data)
else:
# xml格式
xtj = xmltojson()
locations = xtj.main(data)
if self.Iflog:
没有合适的资源?快使用搜索试试~ 我知道了~
DjangoRESTframework课件.zip
共2000个文件
js:948个
png:260个
pyc:210个
需积分: 10 8 下载量 132 浏览量
2019-08-19
23:49:59
上传
评论
收藏 38.68MB ZIP 举报
温馨提示
Web应用前后端分离结构 Web API接口设计的RESTful风格 Django REST framework框架
资源推荐
资源详情
资源评论
收起资源包目录
DjangoRESTframework课件.zip (2000个子文件)
0052b2dc66f8266bdbd9dcbf1aa8991933de63 4KB
0411944c20f34cdcab512cd3e0cf87445fc27b 5KB
041f893e0d8d41130e2cd85f084b9512dc255b 1KB
0749abcd8977ae244ad9e042de491bcd50fd6f 158B
074bec6ad76e55d841a27b9835d85a20dea0be 746B
08ddfcf53c02e82d7eee2e57c38e5672ef89f6 255B
0e15374118c3e52174e9460499e77eebc84535 93B
0e68e85bf04af0559649f43db7d1338482e573 185B
0f6411a0253b27eaa7ac5084f4f91f1a5077a1 21KB
10ea68b53bdc71dff29786de00d439b656754e 158B
11606311e2664bd835f92b5c114681d2e284f5 261B
16ecd37db320bd4ab34aff7941643ee8020883 941B
1add2dcf73944e86e55243eaae20f9b94575c6 4KB
1dcfdaf1a6857c5f83dc27019c7600e1ffaff8 56B
1e53b90b3b9a119c8691917f76d31a2d254a4d 1KB
1f0e58c4c8eede215a81cad1adc3047b956709 85B
1f459c06cd1da74850aae341da3c81e7477686 450B
1ff019efc7b92101462e82656eb89c393c09f8 15KB
25253e9854f0f035c1c7dad197a76ff2859a59 1KB
25ca76df0725f67af25a38edbf7abaaaaab6c9 1KB
268e870ff25f1d72607f6e6f9afa823e073823 3KB
2a4c0165a91a54a0518be7e7d4553047f3e276 151B
2c71046056dd9f8b2baf49e28bf8267dcb39d1 451B
2ded98a72e2827b5218d1a6c160a54e80993e1 11KB
2f212d5424a4dd2774d91d44e18967aa8d5691 1KB
2f537516daf33fdaf579436dfa33fdd9044f49 696B
31b6d89cc88a912ffdf95ad9099b079cbc6eaa 62KB
31d32ecaabea93716184992345dad286461e5d 158B
31e25a0b3a8d956c5bf525a1885903c41ec139 129B
3221fe27823d9724d7797ee2c5c1110c702bb0 160B
33a8a5cfa31b78638e475ce1a5a93ec141d741 2KB
345b6d1835167e52aa0eef3c3c45eae64a1e6b 1KB
36475870da67f3c72f64777c6e0f37d9f4c87b 38KB
36e83fb63a2816339c029fe6fcc45c9712565c 980B
376f74cd6f25eafcfa84a2db68e6f7cc97318f 1KB
3789396a62bbf6999f58650705ee31abd8bbf3 283B
38f3f3dad51e4585f3984282c2a4bec5349c1e 77B
396a7d97f122743c66266e06ae72f3efbf3be4 214B
3a2a064145a6ffe5d2e8a21a07dde7417bc6c0 197B
3bc36fa865512bd7ee4c855aba043735c222f4 91B
3c5f21bc92c96fd8bbfda2c8d837148b3efbd0 17KB
3d46c3d579f0411b47d4b7885d227a15a63c26 70B
407288630caeeef3ef431f28bd6d3f5e1c0657 192B
41e493046487f81690ea133f1c5aba15124295 2KB
41f6758e9d871895087c1124822c95e3080356 268B
41f7f653f63e2759880e02b44aa2fb388a2ed0 1KB
4430eba168de1373e309800e0eee536c6edb7c 158B
4521bcaabde895987ac70289411b54df00f076 829B
4652aa59985ced0bfa47f997788e9a4f2748aa 130B
46bfc7bf81f166ea429c9c45f4374efa507536 668B
4ae02929465039066d97af335d20d392989b1f 190B
4bcd7777d6000e284a9ec27cf9d29398ad46a3 129B
4bf11994f49cb52ff4972fe7c935b382b85b6f 5KB
4c0b094caaea8090608446af8922680d65baa1 1KB
4c399b9a607078076a86bc861fe36b4f8458cc 94B
4d049ac64bf441ba34d1399a1b66f5731d86ff 5KB
4f23027fd0e3a4e725720e1cf1238d8c14d137 2KB
4f642e0b31f77472b128e6d7e384439d4ba4dc 130B
53b862bedd5730337029241c0f558c877f0aeb 129B
54438c425c7b1cf3175df1c5e10679e49c0bb8 190B
5541ce986f6bb598edc8791984b3305c48bacc 2KB
568d0cb5ebfc8d8222c4cf9b696d29990444fb 49B
5841f42c58037c467edf662afdec3c0d46e55c 235B
5a9017fd34645c66b2a9f095d390d27a7e2a9e 656B
5ab5830742c2c29f1c529f09f5f3120b5e9f80 10KB
5b793da53c432e988ceefd8bf151f4c2d42276 180B
5bd64b9215922d7672d7b865f0900ae22e937e 2KB
5d6754f403e30bd43fa288adb7e106ed46c2cb 28KB
5d6d87ce2b0b79541d6712b80aa716c1257956 82B
5d7d96790e3977b7760e9c5e704703d34a3cce 20KB
5e467bc8813c9e22397e144c3c98751647ef3e 8KB
5e95a01beae8e8f4b150b5c82623de4c214136 158B
5f1de6af9b6fe7e39e59eaa5a86fbd279f7092 1KB
60bed871c7d5c87f5a243972afeacad22709d2 54B
6549bdf8fae810809c1a81066000687cb338f6 110B
6775b8a3ab8ec1c37ac7cb455160b827cb3df8 186B
69480d048f43e0475f3319d8bd63d8b833fdbd 3KB
6abbf9dd30df7573b949602035c2ba058438de 4KB
6ac5afaa4187fea6863fe3b55cd2cb32528b7c 393B
6b171317134cb2201a4bd349fd276dc330263f 2KB
6efce76734f3bdea372921b5b37d3f331e054e 91B
6fcab0e17cdeac52b947d5c46bbbaf3c57be6c 231B
7a536b08af04326eb00e6d6529a9c2481ab543 8KB
7ab455706fd1ac35cc717dfe877e1a0e744867 1KB
7b8bcef5fcf515e50963958ae1a350d001e1b2 7KB
7bb59917a52cf2993f6ac338261d4ff538aee4 14KB
7c1b2d106a8b82667e427fa6950f607ecf9c05 722B
7cb37eaa6ae8b1d9a8bab3c6caf529cf05493d 95KB
7d342b3b67c94f1683b6f05c101bd63426c881 994B
804dee5bd5a4265e8fa1eed7fc0d443cd98ed3 1KB
8058126b5c0b576520215552df97b59d6e7725 1KB
817513b5f02cdbb90eef560d676289560053d4 2KB
82b035f4af97b2c896e63c0e5752c626a470a4 1KB
84fd02c11d66799da0075964733343f4b7dda4 312KB
88cb0aec5a4053fabfe3dfc71240d2f60d5a0e 2KB
898c1c252016ab191ab15207be39c0a847d887 369B
8da98c6a6cfcfc601cde5681df1a9c981a49dd 696B
8e035c41ed4a3f7574bd41ea27724516d29fe4 175B
8e8c08fdc3c4ee7d75fefe97c60e89381c0b92 1KB
90a44e244d66a55ce857220a6e8bdc3f4eb2fe 453B
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
Mr、小李
- 粉丝: 0
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 清明节班会课课件重置版更新
- mqtt客户端,适合初学者参考,使用的是mqttnet三方包
- 戴尔 latitude 5400 chromebook
- 基于单片机数显照度计的设计
- 全文检索使用国产达梦数据库实现全文检索的详细说明和实践探索
- SRS-CentOS7-x86-64-5.0-r1.zip
- 全文检索使用ElasticSearch实现全文检索的详细说明和实践探索
- Python《基于TensorFlow的人脸识别(面部表情识别)卷积神经网络 》+源代码+文档说明
- Python《利用bert预训练的中文模型进行文本分类 数据集中文情感分析语料》+源代码+文档说明
- Keil MDK主题美化和代码美化
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功