基于Python的Webservice开发(二)-如何用Spyne开发Webservice
一、功能需求
本次案例是开发一个Item的新建的WebService。IN&OUT的类型JsonDocument。
通过传入相关的参数创建Item,且相关的参数可以被缺省。
二、Spyne的安装
pip install spyne
对于Python3
pip install spyne==2.13.4a1
三、实现代码
引入类
from spyne import Application,rpc,ServiceBase,Iterable,Integer,Unicode
#如果支持soap的协议需要用到Soap11
from spyne.protocol.soap import Soap11
#如果开发传入传出为Json需要用到JsonDocument
from spyne.protocol.json import JsonDocument
#可以创建一个wsgi服务器,做测试用
from spyne.server.wsgi import WsgiApplication
#将Spyne创建的app 发布为django
from django.views.decorators.csrf import csrf_exempt
#创建一个负责数据类型
from spyne.model.complex import ComplexModel
#引用其他的APP
from ItemAPI import APP_Item
创建ItemData的相关属性
class ItemData(ComplexModel):
__namespace__ = 'itemData'
ItemCode=Unicode
SearchCode=Unicode
ItemName=Unicode
Assortment=Unicode
Brand=Unicode
Material=Unicode
ItemSource=Unicode
Category=Unicode
Series=Unicode
Model=Unicode
CostType=Unicode
WareHouse=Unicode
WareHouseLocation=Unicode
Width=Unicode
Length=Unicode
Height=Unicode
Volume=Unicode
Size=Unicode
GLAccountCost=Unicode
GLAccountRevenue=Unicode
GLAccountDistribution=Unicode
SalesPrice=Unicode
CostPrice=Unicode
VatCode=Unicode
IsHarbin=Unicode
IsBatchItem=Unicode
CountryCode=Unicode
创建ItemData相关属性
创建ItemAPI
#创建API
class ItemAPIService(ServiceBase):
#传入参数ItemData,由之前定义的
@rpc(ItemData, _returns=Iterable(Unicode))
def item_api(ctx,itemData):
fieldList=['ItemCode','SearchCode','ItemName','Assortment','Brand','Material','ItemSource','Category','Series','Model','CostType','WareHouse','WareHouseLocation','Width','Length','Height','Volume','Size','GLAccountCost','GLAccountRevenue','GLAccountDistribution','SalesPrice','CostPrice','VatCode','IsHarbin','IsBatchItem','CountryCode']
dict_Data={}
#itemData 会默认将未传值的根据顺序赋Null
for field,value in zip(fieldList,itemData):
if value is not None:
dict_Data[field]=value
#yield f"{field}={value}"
#返回运行结果
yield APP_Item(dict_Data) #定义API的输入输出类型,如果需要支持Soap可以参考网页http://spyne.io
application = Application([ItemAPIService],
tns='spyne.item.api',
in_protocol=JsonDocument(validator='soft'),
out_protocol=JsonDocument()
)
#定义DjangoApplication
item_app = csrf_exempt(DjangoApplication(application))
if __name__ == '__main__':
# You can use any Wsgi server. Here, we chose
# Python's built-in wsgi server but you're not
# supposed to use it in production.
from wsgiref.simple_server import make_server
wsgi_app = WsgiApplication(application)
server = make_server('0.0.0.0', 8000, wsgi_app)
server.serve_forever()
四、对接口进行测试
import http.client,urllib.parse
import json
import requests headers = {'Content-Type': 'application/json'}
requrl = f"http://127.0.0.1:8000/"
dict_Data={}
dict_Data["ItemCode"]="M09HLE220200030000"
dict_Data["ItemName"]="测试"
dict_Data["WareHouse"]=""
dict_Data["CountryCode"]="CN"
dict_Data["CostType"]="M-17XAC02-240"
dict_Data["Series"]="" #item_api是spyne的function名,itemData是传入参数名
postdata=json.dumps({"item_api": {"itemData":dict_Data}})
print(postdata) req = requests.post(requrl,data=postdata)
print(json.loads(req.text))
四、Django配置
之前的spyne的app位于view.py中
from . import view
#item_app是view中定义的django应用名
urlpatterns = [
url(r'^WebAPI/',view.item_app),]
基于Python的Webservice开发(二)-如何用Spyne开发Webservice的更多相关文章
- Python科学计算(二)windows下开发环境搭建(当用pip安装出现Unable to find vcvarsall.bat)
用于科学计算Python语言真的是amazing! 方法一:直接安装集成好的软件 刚开始使用numpy.scipy这些模块的时候,图个方便直接使用了一个叫做Enthought的软件.Enthought ...
- Selenium基于Python web自动化基础二 -- 免登录、等待及unittest单元测试框架
一.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...
- 小白学习python之路(二):安装开发工具
引言 上一章我们安装配置了python3.7,这一章我们安装python的开发工具,我用的pycharm2019 安装 工具连接:https://u20538204.ctfile.com/fs/205 ...
- python运维开发(二十五)---cmdb开发
内容目录: 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT基础架构库(Information Technology Infr ...
- 初识TPOT:一个基于Python的自动化机器学习开发工具
1. TPOT介绍 一般来讲,创建一个机器学习模型需要经历以下几步: 数据预处理 特征工程 模型选择 超参数调整 模型保存 本文介绍一个基于遗传算法的快速模型选择及调参的方法,TPOT:一种基于Pyt ...
- Python服务器开发二:Python网络基础
Python服务器开发二:Python网络基础 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.包括: ...
- 基于python的互联网软件测试开发(自动化测试)-全集合
基于python的互联网软件测试开发(自动化测试)-全集合 1 关键字 为了便于搜索引擎收录本文,特别将本文的关键字给强调一下: python,互联网,自动化测试,测试开发,接口测试,服务测试,a ...
- 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)
目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构 前言 学习Python也有一个半月时间了,学到现在感觉 ...
- 基于Python的Web应用开发实践总结
基于Python的Web应用开发学习总结 项目地址 本次学习采用的是Flask框架.根据教程开发个人博客系统.博客界面如图所示. 整个学习过程收获很多,以下是学习总结. 1.virtualenv ...
随机推荐
- HTTPS中间人攻击实践(原理·实践)
前言 很早以前看过HTTPS的介绍,并了解过TLS的相关细节,也相信使用HTTPS是相对安全可靠的.直到前段时间在验证https代理通道连接时,搭建了MITM环境,才发现事实并不是我想的那样.由于 ...
- remote: Permission to user_name/Code.git denied to other_user_name. fatal: unable to access 'https://github.com/user_name/Code.git/': The requested URL returned error: 403
Error msg: $ git push remote: Permission to xxx/Code.git denied to xxxxxx. fatal: unable to access ' ...
- HashMap、Hashtable、ConcurrentHashMap的原理与区别
同步首发:http://www.yuanrengu.com/index.php/2017-01-17.html 如果你去面试,面试官不问你这个问题,你来找我^_^ 下面直接来干货,先说这三个Map的区 ...
- 简单解析nestJS目录
使用Nest CLI设置新项目非常简单 .只需确保 安装了npm,然后在OS终端中使用以下命令: $ npm i -g @nestjs/cli $ nest new project-name $ cd ...
- flutter 本地存储 (shared_preferences)
Flutter本地存储 和Android.Ios类似,Flutter也支持Preferences(Shared Preferences and NSUserDefaults) .文件.和Sqlite3 ...
- python 绘制柱状图
python 绘制柱状图 import matplotlib.pyplot as plt import numpy as np # 创建一个点数为 8 x 6 的窗口, 并设置分辨率为 80像素/每英 ...
- Flask--特殊装饰器, CBV, 三方组件
一. Flask中的特殊装饰器 before_request # before_request 是在视图函数执行之前执行的 @app.before_request def before(): prin ...
- Nginx访问配置
配置HTTP协议(使用80默认端口,非HTTPS配置SSL)访问网站 包括RestAPI的配置和RestAPI文档的配置 例如: server { # 配置为HTTP协议 listen ; serve ...
- jmeter 安装
3.1 windows10环境下测试工具jmeter安装与配置 3.1.1下载安装java 浏览器中打开链接:http://down-www.7down.net/pcdown/soft/xiazai/ ...
- 台达wplsoft2.34指令表
常用: LD 载入 A 接点 LDI 载入 B 接点 AND 串联 A 接点 ANI 串联 B 接点 OR 并联 A 接点 ORI 并联 B 接点 ANB 串联回路方块 ORB 并联回路方块 MPS ...