维护dajaxice调用可以使用的持久串行连接?

时间:2013-03-06 16:48:07

标签: python django dajaxice

我有一个基本的django设置正在运行,我正在实现dajaxice调用,将一些数据写入串行连接(RainbowDuino在另一端)。

以下代码可以正常工作,当您建立到Arduino的串行连接时,必须等待,然后在Arduino重置时向其写入数据。

from django.utils import simplejson
from dajaxice.decorators import dajaxice_register
import time, serial

def serialWrite(msg):
    try:
        ser = serial.Serial('/dev/ttyUSB0', 9600)
        time.sleep(1.5) #wait for arduino to reset
        ser.write(msg)
        return "Running Animation"
    except:
        return "Failed to communicate with cube"

@dajaxice_register
def animate(request, data):
    msg = serialWrite(str(data))
    return simplejson.dumps({'message':msg})

我是python和django所有新手,所以我不确定如何在这种环境中维护一个可以使用串行连接的持久对象。从我自己的阅读和测试中我可以看到,仅在收到相应的按钮点击时才调用dajaxice注册方法。

这是一种我可能会使用我的应用程序视图来实例化串行连接的情况,如果是这样的话,我如何与dajaxice调用共享连接?

1 个答案:

答案 0 :(得分:1)

如果您的运行时环境很简单,那么中间件可能是一个选项。

// middleware/__init__.py
class ArduinoMiddleware:

    def __init__(self):
        self.serial = serial.Serial('/dev/ttyUSB0', 9600)
        time.sleep(1.5)

    def process_request(self, request):
        request.serialWrite = self.serialWrite

    def serialWrite(self, msg):
        try:
            self.serial.write(msg)
            return "Running Animation"
        except:
            return "Failed to communicate with cube"

// ajax.py
@dajaxice_register
def animate(request, data):
    msg = request.serialWrite(str(data))
    return simplejson.dumps({'message':msg})

// settings.py
...
MIDDLEWARE_CLASSES = (
  'middleware.ArduinoMiddleware',
  ...
)

未经测试,如果您在多线程环境(如manage.py runserver)中运行,可能需要锁定。