描述
写道
经过一天的资料查看及测试,已经可以成功的在jiayou3中调用icgoo的数据....
我这里的测试是通过get方式向接口传递几个参数后返回型号在icgoo的实时报价数据...
我这里的测试是通过get方式向接口传递几个参数后返回型号在icgoo的实时报价数据...
准备工作
写道
项目 jiayou3 + v45
1.下载django-piston,并将该app放到项目的根目录下;
2.在项目根目录下新建一个名字为API的app,我在里面创建了五个文件;
2.1 : __init__.py 空
2.2 : handlers.py 用来存放接口的定义
2.3 : urls.py 用来存放接口的url
2.4 : authentication.py 用来存放权限校验类,我是从piston里copy过来的,在其中加了一个自定义校验
2.5 : my_pycurl.py 是一个封装了curl操作的方法,供调用接口里使用
3.在根urls加入 url(r'^api/', include('API.urls', namespace='django-piston')),
## 因为这次做接口不是单纯的发送或单纯的接收,所以上面3步,我分别在jiayou3与v45各做了一份;其中v45使用了handler.py,urls.py,authentication.py三个文件,而jiayou3使用了my_pycurl.py文件
1.下载django-piston,并将该app放到项目的根目录下;
2.在项目根目录下新建一个名字为API的app,我在里面创建了五个文件;
2.1 : __init__.py 空
2.2 : handlers.py 用来存放接口的定义
2.3 : urls.py 用来存放接口的url
2.4 : authentication.py 用来存放权限校验类,我是从piston里copy过来的,在其中加了一个自定义校验
2.5 : my_pycurl.py 是一个封装了curl操作的方法,供调用接口里使用
3.在根urls加入 url(r'^api/', include('API.urls', namespace='django-piston')),
## 因为这次做接口不是单纯的发送或单纯的接收,所以上面3步,我分别在jiayou3与v45各做了一份;其中v45使用了handler.py,urls.py,authentication.py三个文件,而jiayou3使用了my_pycurl.py文件
从url开始
每一个接口都是一个url,它对应着get,post,put,delete各种操作,各不侵犯,严格遵守; #v45->API->urls.py #coding=utf-8 from django.conf.urls.defaults import * from piston.resource import Resource from authentication import CustomAuthentication , HttpBasicAuthentication from handlers import DataFromIcgooHandler #提示信息'jiayou3',这个basic验证会调用系统的auth来进行匹配,成功即通过; _auth = CustomAuthentication(realm='jiayou3') _AUTHENTICATORS = [_auth] datafromicgoo_handler = Resource(DataFromIcgooHandler,authentication=_AUTHENTICATORS) urlpatterns = patterns('', url(r'^data_from_icgoo/', datafromicgoo_handler, { 'emitter_format': 'json' }), ) ## 解释一下 ## 接口url就是 '/api/data_from_icgoo/'; ## 在handlers 里定义了一下 DataFromIcgooHandler类,用来驱动这个接口,下面会讲到; ## 同时要调用这个接口还需要通过验证,authentication=_AUTHENTICATORS , 必须是我定义的用户名及密码才可以通过; ## CustomAuthentication就是我自定义的一个验证方法 ## 'emitter_format': 'json' 表示返回的数据是json,你还可以自定义为yaml,xml等
hanlder开始工作
# v45->API->handlers.py #coding=utf-8 from piston.handler import BaseHandler from ajax_show_stock.jiayou import JiayouInterface class DataFromIcgooHandler(BaseHandler): allowed_methods = ('GET',) def read(self, request): ''' 根据参数返回icgoo的实时数据 ''' if request.method == 'GET': data = request.GET else: data = request.POST partno = data.get('partno','') quantity = data.get('quantity',1) try: quantity = int(quantity) except Exception,e: quantity = 1 supplier = data.get('supplier','999') real = data.get('real','0')#'1'为去官网找原始数据(主要是我们没有,mouser等官网有的) if real == '0': real = False else: real = True test = JiayouInterface(partno,quantity) if supplier == '999': supplier = None if not real: results = test.getAllPriceToJiayou(supplier,True) else: results = test.getRealTimeToJiayou(supplier) return results # allowed_methods = ('GET',) 表示个接口只允许get操作,如果你还需要别的操作自行添加,如 allowed_methods = ('GET','POST','DELETE',) # GET操作会自动去寻找read函数,同理POST等也有其对应的函数名; # 获取参数后就就可以开始一系列的动作了,然后将值返回即可,返回的是一个json字符串,到时候你可以用json.loads(results)进行结构还原;
看到这里是不是很简单,不错,此时这个接口已经定义好了,就等着别人来使用它们了.......
使用接口
jiayou3 -> sale -> views.py ## 在需要使用该接口的地方类似以下调用即可; if request.method == 'GET': paras = request.GET else: paras = request.POST url = 'http://localhost:8000/api/data_from_icgoo/?' + urllib.urlencode(paras) data = request_curl(url,'GET') ## request_curl 就是 my_pycurl.py里的一个方法,它用来接用接口 ## data 就对应着我们上面 handlers里的返回的 results
my_pycurl.py
import pycurl import StringIO import urllib USERNAME = 'admin' PASSWD = 'admin' HOST = 'http://localhost:8000' def request_curl(url, request_method='GET', **data): url = url.encode('utf-8', 'ignore') curl = pycurl.Curl() res = StringIO.StringIO() curl.setopt(pycurl.URL, url) curl.setopt(pycurl.WRITEFUNCTION, res.write) #curl.setopt(pycurl.FOLLOWLOCATION,1) curl.setopt(pycurl.USERPWD, '%s:%s' % (USERNAME, PASSWD)) if request_method == 'POST': curl.setopt(pycurl.POSTFIELDS, urllib.urlencode(data)) elif request_method == 'PUT': curl.setopt(pycurl.PUT, 1) elif request_method == 'DELETE': curl.setopt(pycurl.CUSTOMREQUEST, 'delete') else: curl.setopt(pycurl.HTTPGET, 1) #This will tell libcurl not to use any signal related code that causes in a multithreaded python script this kind of error. curl.setopt(pycurl.NOSIGNAL, 1) curl.setopt(pycurl.MAXREDIRS,5) #----------- curl.setopt(pycurl.CONNECTTIMEOUT,30) curl.setopt(pycurl.TIMEOUT,60) #------ #curl.setopt(pycurl.USERAGENT,'Mozilla/5.0(Windows;U;Windows NT 5.1;zh-CN;rv:1.9.2.9)Gecko/20100824 Firefox/3.6.9') curl.perform() #print type(res.getvalue()) return res.getvalue()
相关推荐
django-piston-0.2.2.tar
标题中的"PyPI 官网下载 | django-wechat-web-0.0.15.tar.gz"指的是Python的包管理器PyPI(Python Package Index)上发布的名为`django-wechat-web`的一个版本为0.0.15的软件包。这个包被压缩成tar.gz格式的文件供...
资源分类:Python库 所属语言:Python 资源全名:django-piston-0.2.2.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
总结,Django-1.2.5是Python Web开发的一个重要里程碑,提供了一系列强大的工具和特性,使得开发者能够快速构建安全、高效的Web应用程序。尽管现在已经有了更新的版本,但理解1.2.5版本的基本概念和工作原理对于学习...
《PyPI官网下载:django-tables2-column-shifter-0.3.0.tar.gz》 在Python的世界里,PyPI(Python Package Index)是开发者们分享和获取Python软件包的重要平台。今天我们要讨论的是其中的一个特定包——`django-...
django-dynamic-scraper, 通过 Django 管理界面创建 Scrapy scraper django-dynamic-scraper动态抓取器是一个用于 Django的应用程序,它构建在抓取框架的顶部,让你通过 Django 管理接口创建和管理爬虫爬虫。...
【django-admin-bootstrap-master.zip】是一个包含Django管理界面(admin)风格化为Bootstrap主题的项目压缩包。这个项目旨在提供一个美观、响应式且用户体验友好的Django后台管理界面。Bootstrap是一个流行的前端...
django-taggit-serializer是基于django-taggit的一个序列化库,它的主要任务是帮助我们在序列化和反序列化过程中处理Taggit创建的标签模型。django-taggit本身是一个强大的标签管理工具,它允许开发者轻松地为Django...
django-tables2, Django tables2用于创建HTML表的应用程序 django-tables2-- 用于创建HTML表格的应用程序 django-tables2简化了将数据集转换为HTML表格的任务。 它对分页和排序有本机支持。 它对HTML表做什么 django...
Django-REST-framework是一个建立在Django框架之上的强大的REST API工具包,它允许开发者利用Django的各种组件快速构建Web服务API。本教程基于Django1.9以及restframework-v3.3.3版本,着重介绍了序列化、请求和响应...
**Python库 Django-Bakery详解** Django-Bakery是一个基于Python的库,专为Django框架设计,用于构建静态网站。它将动态网站内容烘焙(bake)成静态HTML文件,提供更快的加载速度和更好的离线访问能力。Django-...
`django-bootstrap3-12.1.0`是Django框架和Bootstrap 3的一个优秀整合,旨在简化Web开发过程中的前端工作。通过使用这个库,开发者可以更专注于业务逻辑,同时创建出美观、响应式的用户界面。在实际项目中,结合...
- **后端**:暗示`django-bakery`主要用于Web应用的后端开发。 - **开发语言**:指明使用Python进行开发。 - **Python库**:说明`django-bakery`是一个可复用的Python组件。 总结起来,`django-bakery-0.5.0.tar.gz...
此外,它还与其他流行的Django应用如`django-guardian`和`django-admin-tools`等良好协作,为Web应用提供更丰富的功能集。 ### 总结 `django-hijack-2.1.4.tar.gz`是Python开发者和Django框架使用者的有力工具,它...
创建一个虚拟环境,然后在这个环境中安装django-simpleui和其他依赖,能更好地维护项目的整洁性和可移植性。 总结起来,"django-simpleui-2021.2.tar.gz"是一个针对Django框架的UI增强库,它提供了一套简洁、可定制...
从名称来看,`django-aws-billing`库可能与Django框架有关,Django是Python的一种流行Web开发框架。这意味着该库可能是为Django项目设计的,用于整合AWS计费信息处理到基于Django的Web应用中。这可能包括自动获取...
这是在django 1.8中工作的django-活塞叉 像这样使用pip安装它 pip install git+https://github.com/natebeacham/django-piston.git
**Python库 django-summernote-0.5.9.tar.gz** `django-summernote` 是一个集成在Django框架中的富文本编辑器,版本0.5.9是它的一个历史版本。这个库允许开发者在Django应用中方便地实现用户友好的富文本编辑功能,...
Django-BS4库可能是为了帮助开发者更容易地在Django项目中集成Bootstrap 4,Bootstrap是一个流行的前端框架,用于创建响应式和移动优先的网站设计。通过这个库,开发者可以利用Bootstrap 4的样式和组件,同时保持...
`django-microsip-base` 是一个基于Python的Web框架Django开发的微型SIP(Session Initiation Protocol)基础库。这个库主要用于构建VoIP(Voice over Internet Protocol)相关的应用程序和服务,特别是与SIP通信...