一、功能需求

本次案例是开发一个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的更多相关文章

  1. Python科学计算(二)windows下开发环境搭建(当用pip安装出现Unable to find vcvarsall.bat)

    用于科学计算Python语言真的是amazing! 方法一:直接安装集成好的软件 刚开始使用numpy.scipy这些模块的时候,图个方便直接使用了一个叫做Enthought的软件.Enthought ...

  2. Selenium基于Python web自动化基础二 -- 免登录、等待及unittest单元测试框架

    一.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  3. 小白学习python之路(二):安装开发工具

    引言 上一章我们安装配置了python3.7,这一章我们安装python的开发工具,我用的pycharm2019 安装 工具连接:https://u20538204.ctfile.com/fs/205 ...

  4. python运维开发(二十五)---cmdb开发

    内容目录: 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT基础架构库(Information Technology Infr ...

  5. 初识TPOT:一个基于Python的自动化机器学习开发工具

    1. TPOT介绍 一般来讲,创建一个机器学习模型需要经历以下几步: 数据预处理 特征工程 模型选择 超参数调整 模型保存 本文介绍一个基于遗传算法的快速模型选择及调参的方法,TPOT:一种基于Pyt ...

  6. Python服务器开发二:Python网络基础

    Python服务器开发二:Python网络基础   网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.包括: ...

  7. 基于python的互联网软件测试开发(自动化测试)-全集合

    基于python的互联网软件测试开发(自动化测试)-全集合 1   关键字 为了便于搜索引擎收录本文,特别将本文的关键字给强调一下: python,互联网,自动化测试,测试开发,接口测试,服务测试,a ...

  8. 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)

    目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构   前言 学习Python也有一个半月时间了,学到现在感觉 ...

  9. 基于Python的Web应用开发实践总结

    基于Python的Web应用开发学习总结 项目地址   本次学习采用的是Flask框架.根据教程开发个人博客系统.博客界面如图所示. 整个学习过程收获很多,以下是学习总结. 1.virtualenv ...

随机推荐

  1. Fuck me

    know how to deal with \(\sum_i\binom{n}{i}a^i\)??

  2. wget在linux中安装出现错误解决办法

    在使用wget命令报错 certificate common name 'xxx' doesn't match requestde host name,我们一般的解决办法是查找下载地址,但是有时候更换 ...

  3. react中的this.setState()

    修改组件的状态可以使用的一些方法: 1.比较常用的 this.setState({ message:"你好" }) 2.state更新是异步的时候 因为this.props和thi ...

  4. Centos7 启动指定docker容器报错

    今天做docker实验时,把docker镜像pull下后,启动报如下错误: 错误信息:WARNING: IPv4 forwarding is disabled. Networking will not ...

  5. git异常操作解决办法合集

    1. git add .后发现提交错误,想撤销 git reset head 文件名-----撤销某个文件 git reset head --hard 强制撤销当前的所有操作到上次提交的版本 2. g ...

  6. 简单了解python使用正则表达式

    正则[Regular Expression]:正则表达式通常被用来检索.替换那些符合某个模式(规则)的文本. 正则是用来干啥的:正则就是用来匹配字符串的. Python中string的几个方法: fi ...

  7. vs code 的便捷使用

    鼠标滚动 改变字体大小 打开编辑器设置,搜索 editor.mouseWheelZoom  或者文本设置 自动保存 打开设置 搜索  autosave

  8. 【C++】GSL(GNU Scientific Library) 的安装及在 Visual Studio 2017 中的使用

    GSL 是 GNU 开发并维护的科学计算的库,其中包括: 复数 多项式的根 特殊函数 向量和矩阵 排列 排序 BLAS支持 线性代数 Eigensystems 快速傅立叶变换 正交 随机数 准随机序列 ...

  9. [模板]fhqTreap

    用途 平衡树(可实现区间翻转) 原理 和treap一样,中序遍历表示权值的顺序,并且每个点有一个随机的附加值,形成一个堆来保证复杂度 但是不旋转,所有操作通过split和merge实现 分为两种spl ...

  10. WIKI 部署后记录

    使用说明 环境 MYSQL 安装方式: YUM 版本:5.7 账号: root / 123456 主机白名单: localhost 账号:admin / 123456 主机白名单: % 账号:conf ...