`
xiaolin0199
  • 浏览: 571128 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

django-piston创建web services

 
阅读更多

描述

写道
经过一天的资料查看及测试,已经可以成功的在jiayou3中调用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文件

 

从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

    django-piston-0.2.2.tar

    PyPI 官网下载 | django-wechat-web-0.0.15.tar.gz

    标题中的"PyPI 官网下载 | django-wechat-web-0.0.15.tar.gz"指的是Python的包管理器PyPI(Python Package Index)上发布的名为`django-wechat-web`的一个版本为0.0.15的软件包。这个包被压缩成tar.gz格式的文件供...

    Python库 | django-piston-0.2.2.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:django-piston-0.2.2.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Django-1.2.5.tar.gz

    总结,Django-1.2.5是Python Web开发的一个重要里程碑,提供了一系列强大的工具和特性,使得开发者能够快速构建安全、高效的Web应用程序。尽管现在已经有了更新的版本,但理解1.2.5版本的基本概念和工作原理对于学习...

    PyPI 官网下载 | django-tables2-column-shifter-0.3.0.tar.gz

    《PyPI官网下载:django-tables2-column-shifter-0.3.0.tar.gz》 在Python的世界里,PyPI(Python Package Index)是开发者们分享和获取Python软件包的重要平台。今天我们要讨论的是其中的一个特定包——`django-...

    django-dynamic-scraper, 通过 Django 管理界面创建 Scrapy scraper.zip

    django-dynamic-scraper, 通过 Django 管理界面创建 Scrapy scraper django-dynamic-scraper动态抓取器是一个用于 Django的应用程序,它构建在抓取框架的顶部,让你通过 Django 管理接口创建和管理爬虫爬虫。...

    django-admin-bootstrap-master.zip

    【django-admin-bootstrap-master.zip】是一个包含Django管理界面(admin)风格化为Bootstrap主题的项目压缩包。这个项目旨在提供一个美观、响应式且用户体验友好的Django后台管理界面。Bootstrap是一个流行的前端...

    Python库 | django-taggit-serializer-0.1.5.tar.gz

    django-taggit-serializer是基于django-taggit的一个序列化库,它的主要任务是帮助我们在序列化和反序列化过程中处理Taggit创建的标签模型。django-taggit本身是一个强大的标签管理工具,它允许开发者轻松地为Django...

    django-tables2, Django tables2用于创建HTML表的应用程序.zip

    django-tables2, Django tables2用于创建HTML表的应用程序 django-tables2-- 用于创建HTML表格的应用程序 django-tables2简化了将数据集转换为HTML表格的任务。 它对分页和排序有本机支持。 它对HTML表做什么 django...

    Django-REST-framework教程中文版

    Django-REST-framework是一个建立在Django框架之上的强大的REST API工具包,它允许开发者利用Django的各种组件快速构建Web服务API。本教程基于Django1.9以及restframework-v3.3.3版本,着重介绍了序列化、请求和响应...

    Python库 | django-bakery-0.9.2.tar.gz

    **Python库 Django-Bakery详解** Django-Bakery是一个基于Python的库,专为Django框架设计,用于构建静态网站。它将动态网站内容烘焙(bake)成静态HTML文件,提供更快的加载速度和更好的离线访问能力。Django-...

    Python库 | django-bootstrap3-12.1.0.tar.gz

    `django-bootstrap3-12.1.0`是Django框架和Bootstrap 3的一个优秀整合,旨在简化Web开发过程中的前端工作。通过使用这个库,开发者可以更专注于业务逻辑,同时创建出美观、响应式的用户界面。在实际项目中,结合...

    PyPI 官网下载 | django-bakery-0.5.0.tar.gz

    - **后端**:暗示`django-bakery`主要用于Web应用的后端开发。 - **开发语言**:指明使用Python进行开发。 - **Python库**:说明`django-bakery`是一个可复用的Python组件。 总结起来,`django-bakery-0.5.0.tar.gz...

    Python库 | django-hijack-2.1.4.tar.gz

    此外,它还与其他流行的Django应用如`django-guardian`和`django-admin-tools`等良好协作,为Web应用提供更丰富的功能集。 ### 总结 `django-hijack-2.1.4.tar.gz`是Python开发者和Django框架使用者的有力工具,它...

    PyPI 官网下载 | django-simpleui-2021.2.tar.gz

    创建一个虚拟环境,然后在这个环境中安装django-simpleui和其他依赖,能更好地维护项目的整洁性和可移植性。 总结起来,"django-simpleui-2021.2.tar.gz"是一个针对Django框架的UI增强库,它提供了一套简洁、可定制...

    PyPI 官网下载 | django-aws-billing-0.1.3.tar.gz

    从名称来看,`django-aws-billing`库可能与Django框架有关,Django是Python的一种流行Web开发框架。这意味着该库可能是为Django项目设计的,用于整合AWS计费信息处理到基于Django的Web应用中。这可能包括自动获取...

    django-piston:django-活塞的叉子

    这是在django 1.8中工作的django-活塞叉 像这样使用pip安装它 pip install git+https://github.com/natebeacham/django-piston.git

    Python库 | django-summernote-0.5.9.tar.gz

    **Python库 django-summernote-0.5.9.tar.gz** `django-summernote` 是一个集成在Django框架中的富文本编辑器,版本0.5.9是它的一个历史版本。这个库允许开发者在Django应用中方便地实现用户友好的富文本编辑功能,...

    Python库 | django-bs4-0.0.3.tar.gz

    Django-BS4库可能是为了帮助开发者更容易地在Django项目中集成Bootstrap 4,Bootstrap是一个流行的前端框架,用于创建响应式和移动优先的网站设计。通过这个库,开发者可以利用Bootstrap 4的样式和组件,同时保持...

    Python库 | django-microsip-base-1.0.5.zip

    `django-microsip-base` 是一个基于Python的Web框架Django开发的微型SIP(Session Initiation Protocol)基础库。这个库主要用于构建VoIP(Voice over Internet Protocol)相关的应用程序和服务,特别是与SIP通信...

Global site tag (gtag.js) - Google Analytics