Python Web中REST API使用示例——基于云平台+云服务打造自己的在线翻译工具

本文主要是介绍Python Web中REST API使用示例——基于云平台+云服务打造自己的在线翻译工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

做为一个程序员可能在学习技术,了解行业新动态,解决问题时经常需要阅读英文的内容;而像我这样的英文小白就只能借助翻译工具才能理解个大概;不禁经常感慨,英文对学习计算机相关知识太重要了!最近发现IBM的云平台Blumemix,并且提供语言翻译的服务,感觉不错,就拿来研究学习一下;这里就分享一下我的研究学习过程,如何使用Python调用REST API打造自己的在线翻译工具,并演示如何把它发布到云平台上,让每个人都可以通过网络访问使用它。

应用效果展示

您可以通过点击效果图片的链接访问它。


构建一个类似的应用程序的前提条件

一个 Bluemix 帐户,您还没有? 点击这里注册,已经有,点击这里登录;

对 HTML(超文本标记语言)的基本了解;

对CSS (层叠样式表)的基本了解;

对JavaScript(一种直译式脚本语言)的基本了解;

对Python 语言的基本了解;

对Python Web编程的基本了解;

我提供了所有必要代码,但对这些技术的基本了解有助于您理解有关的细节。

步骤 1. 创建您的 Python 应用程序

  1. 1、在 Bluemix 用户界面中,转至“仪表板”。

  2. 2、单击创建应用程序

  3. 3、单击 Web,然后按照指导经验来选择入门模板,指定名称以及选择编码方式。

  4. 输入应用程序名称

  5. 应用程序名称是唯一的,接下来要通过它做为二级域名来访问你的应用!
  6. 点击完成之后,需要等待一会儿,然后可以看到下图的界面

  7. 这时就可以访问你刚刚创建的应用了。如下图:

  1. 可以通过单击 Bluemix 用户界面中应用程序“概述”上的添加服务或 API,将服务添加到应用程序中。也可以使用 cf 命令行界面。请参阅处理应用程序的可用选项。

  2. 在服务列表中选择语言翻译(Language Translation)

  3. 您可以指定服务的名称,也可以使用默认的;

获取服务信息

进入自己的应用程序》概述页面,找到已经添加的服务,点击“显示凭证”,可以查看服务的具体信息:

在浏览器中访问服务URL如下图:


步骤 3. 准备开发环境

有关开发环境搭建的细节,请参考下面的文章:

《Python入门》Windows 7下Python Web开发环境搭建笔记

《Python入门》第一个Python Web程序——简单的Web服务器

步骤 4.编写代码

1、下载初始Hello World示例代码

进入您的应用程序,点击左侧的开始编码,在右侧点击“下载入门模板代码”。


2、使其在本地运行

1、将下载的入门模板代码解压到一个目录,打开命令行窗口,切换到这个目录下

2、执行命令:python server.py

3、在浏览器中访问:http://localhost:8000/

3、编写代码

前台主要AJAX代码:调用后台的翻译的处理程序,实现用户交互

[javascript]  view plain copy
  1. //通过AJAX调用后台翻译程序  
  2. function doExecTrans(){  
  3.     var txt = $("#InputText").val();  
  4.     if (txt == ""){  
  5.         alert("请输入要翻译的文本!");  
  6.         return;  
  7.     }  
  8.       
  9.     $("#ProgressDiv").show();  
  10.     $.ajax({  
  11.        type: "GET",  
  12.        url: "trans",  
  13.        dataType:"json",  
  14.        data: {"txt":txt},  
  15.        success: function(data){  
  16.          $("#ProgressDiv").hide();  
  17.          console.log(data);  
  18.          if (data.error){  
  19.             alert(data.error);  
  20.          }else{  
  21.             $("#OutputText").text(data.text);  
  22.          }  
  23.        },  
  24.        error: function(data){  
  25.          console.log(data);ssss  
  26.          alert( "Error Msg: " + data );  
  27.          $("#ProgressDiv").hide();  
  28.        }  
  29.     });  
  30. }  

后台主要代码:server.py,与翻译服务Web Service交互

import os	#Python的标准库中的os模块包含普遍的操作系统功能
import re	#引入正则表达式对象
import urllib	#用于对URL进行编解码
import sys		#提供了许多函数和变量来处理 Python 运行时环境的不同部分.
import urllib2	#用于模拟HTTP/HTTPS请求#调试函数,用于输出对象的属性及属性值
def getAllAttrs(obj):strAttrs = ''for o in dir(obj): strAttrs =strAttrs + o + ' := ' + str(getattr(obj,o)) + '<br />'return strAttrs;try:from SimpleHTTPServer import SimpleHTTPRequestHandler as Handlerfrom SocketServer import TCPServer as Server
except ImportError:from http.server import SimpleHTTPRequestHandler as Handlerfrom http.server import HTTPServer as Server#自定义处理程序,用于处理HTTP请求
class TransHTTPHandler(Handler):#处理GET请求def do_GET(self):#页面输出模板字符串templateStr = '<html><head><title>pytrans</title></head><body>%s</body></html>'# 将正则表达式编译成Pattern对象pattern = re.compile(r'/trans\?txt\=(.*)')# 使用Pattern匹配文本,获得匹配结果,无法匹配时将返回Nonematch = pattern.match(self.path)if match:params = { 'source':'en', 'target':'es', 'text':match.group(1) }        surl = 'https://gateway.watsonplatform.net/language-translation/api/v2/translate?' + urllib.urlencode(params)resContent = ''try:passman = urllib2.HTTPPasswordMgrWithDefaultRealm() #创建域验证对象passman.add_password(None, surl, "翻译服务用户名", "密码") #设置域地址,用户名及密码auth_handler = urllib2.HTTPBasicAuthHandler(passman) #生成处理与远程主机的身份验证的处理程序opener = urllib2.build_opener(auth_handler) #返回一个openerDirector实例urllib2.install_opener(opener) #安装一个openerDirector实例作为默认的开启者。response = urllib2.urlopen(surl) #打开URL链接,返回Response对象resContent = response.read() #读取响应内容except:info=sys.exc_info()resContent = getAllAttrs(info[0]) + getAllAttrs(info[1]) #获取异常的详细信息self.protocal_version = 'HTTP/1.1'	#设置协议版本self.send_response(200)	#设置响应状态码self.send_header("Content-type", "text/html")	#设置响应头self.end_headers()self.wfile.write("{\"text\":\"%s\"}" % resContent)	#输出响应内容else:#/trans 之外的请求,交给底层去处理if self.path == "":self.path = '/index.html'fStatic = self.send_head()if fStatic:try:self.copyfile(fStatic, self.wfile)finally:fStatic.close()# Read port selected by the cloud for our application
PORT = int(os.getenv('PORT', 8000))
# #改变当前目录到 static 目录
os.chdir('static')httpd = Server(("", PORT), TransHTTPHandler)
try:print("Start serving at port %i" % PORT)httpd.serve_forever() ##设置一直监听并接收请求
except KeyboardInterrupt:pass #按Ctrl+C退出服务
httpd.server_close()
我们定义的do_GET处理程序只处理/trans请求,/trans 之外的请求,交给底层去处理

步骤 5. 本地运行访问

运行

执行命令:python server.py

访问

在浏览器中访问,查看效果,打开浏览器,输入:http://localhost:8000/



步骤 6. 上传应用程序

登录到 Bluemix™ 后,可以使用 cf push 命令来上传应用程序。

开始之前,您必须:
  1. 1、安装 Cloud Foundry 命令行界面。

    下载 Cloud Foundry 命令行界面


  2. 请根据自己使用的操作系统下载对应的版本;我使用的是Windows 7 64位操作系统,
  3. 下载Binaries版本的不需要安装,直接解压到Windows目录就可以了

  4. 依次点击仪表板》pytrans(您创建的应用程序名称)》开始编码,可以查看属于自己的命令;如下图:

  5. 2、连接到 Bluemix
  6. 打开命令提示符窗口:开始》运行,输入“cmd”,回车
  7. 执行:cf api https://api.ng.bluemix.net,如下图:

  8. 3、登录到 Bluemix
  9. 注意,这里要换成对应你自己账户的命令!
  10.     
    cf login -u ivu4e@qq.com -o ivu4e@qq.com -s ivu4e

4、发出 cf push 命令时,cf 命令行界面将提供使用 buildpack 来构建并运行应用程序的 Bluemix 环境的工作目录。

  1. 从应用程序目录中,输入带有应用程序名称的 cf push 命令。在 Bluemix 环境中,应用程序名称必须是唯一的。
  2. 后面的"-m 512m"是修改应用程序内存配额的,可以不带这个参数,如下图:

  3. 注意:执行cf push前将命令行当前目录切换到您刚刚创建的应用目录,例如我刚刚创建的
    C:\python\pytrans\,cf push 后面的pytrans要替换为您在Bluemix上创建的应用名称。
  4. 提示: 使用 cf push 命令时,cf 命令行界面会将当前目录中的所有文件和目录复制到 Bluemix。确保应用程序目录中只包含必需的文件。
  5. cf push 命令上传应用程序并将其部署到 Bluemix。有关 cf push 的更多信息,请参阅 cf 命令。有关 buildpack 的信息,请参阅使用社区 buildpack。

  6. 如果更改了应用程序,可以通过再次输入 cf push 命令来上传这些更改。 cf 命令行界面会使用您先前的选项以及您对提示的响应来通过新的代码段更新应用程序的任何运行中实例。
提示: 您还可以从  Bluemix DevOps Services 上传或部署应用程序。请参阅 在 Node.js 中使用 Web IDE 开发Bluemix 应用程序。

步骤 7. 做个小小的测试

通过仪表板进入您刚刚创建的应用页面,点击左侧的开始编码,右侧顶部会显示:您的应用程序正在运行。http://pytrans.mybluemix.net/

点击后面的链接访问刚刚发布的应用。


结束语

通过IBM的Bluemix云平台,我们可以轻松的将自己的应用共享到网络上;

创建Web应用之后会自动获得一个用来访问应用的二级域名;

通过应用程序概述中的应用程序运行状况,可以方便的查看和管理应用运行状态;

这里通过一个小例子展示如何将自己的应用发布到IBM的Bluemix云平台上,

如何与IBM云平台上提供的语言翻译服务交互。

如果您有更好的应用或想法,试试通过IBM的Bluemix云平台共享出来吧。

这篇关于Python Web中REST API使用示例——基于云平台+云服务打造自己的在线翻译工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/846140

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC