0

かぎ針編みライブラリを使用してdjangoビューを実行していますが、. 私は本当に単純ですが、経験がなく、解決方法がわかりません

Internal Server Error: /clocking/request/send_fence_to_device/
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 187, in get_response
    response = middleware_method(request, response)
  File "/usr/local/lib/python2.7/dist-packages/django/middleware/locale.py", line 29, in process_response
    if (response.status_code == 404 and
AttributeError: 'EventualResult' object has no attribute 'status_code'
ERROR:django.request:Internal Server Error: /clocking/request/send_fence_to_device/
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 187, in get_response
    response = middleware_method(request, response)
  File "/usr/local/lib/python2.7/dist-packages/django/middleware/locale.py", line 29, in process_response
    if (response.status_code == 404 and
AttributeError: 'EventualResult' object has no attribute 'status_code'
{'answer': 'ok'}

私のコードビュー

@run_in_reactor
def send_fence_to_device (request):
    device_id = request.GET['device_id']
    fence_id = request.GET['fence_id']
    fnc = Fence.objects.get(id=fence_id)
    dev = Device.objects.get(id=device_id)
    try:
        devLog = dev.devicelog_set.filter(device_id=device_id, status = True).order_by('created').reverse()[:1].all()[0]
    except:
        print "error"
        return HttpResponse(simplejson.dumps(0), mimetype='application/json')
    params = simplejson.loads(fnc.other)
    lttdlgtd = simplejson.loads(fnc.points)
    strCommand = ".geo.%s,%s,%s,%s,%s,%s,%s,%s,%s*" % (params['identificator'], fnc.name[:4], round(float(lttdlgtd[0][0]), 4), round(float(lttdlgtd[0][1]), 4), round(float(fnc.radius), 4), params['time_to_arrive'], params['fence_class'], params['tolerance'], 1)
    print strCommand
    creator = ClientCreator(reactor, AMP)
    cmmdDeferred = creator.connectTCP('127.0.0.1', 8750)
    def connected(protocol):
        return protocol.callRemote(
            AmpProcessor,
            proto=str('TELCOMIP'),
            imei=str(devLog.ip),
            ip=str(devLog.ip),
            port=str(devLog.port),
            cmmd=str(strCommand)
            )
    cmmdDeferred.addCallback(connected)
    #def processed(result):
    #    print result
    #cmmdDeferred.addCallback(processed)
    def done(result):
        reactor.stop()
        return HttpResponse(simplejson.dumps(result), mimetype='application/json')
    cmmdDeferred.addCallback(done)
    #return HttpResponse(simplejson.dumps(1), mimetype='application/json')
4

2 に答える 2

0

答えはファクトリです.django関数は2つの分離された関数であり、1つは共通関数であり、もう1つはツイスト関数であり、ツイストはリアクターで実行され、django関数は.waitメソッドを使用してそれを呼び出します

def view_function (request):
    one = request.GET['one']
    two = request.GET['two']
    result = sendMessage(one, two)
    try:
        answer = result.wait(timeout=None)
        return HttpResponse(simplejson.dumps(answer['answer']), mimetype='application/json')
    except TimeoutError:
        return HttpResponse(simplejson.dumps(-1), mimetype='application/json')

@run_in_reactor    
def twisted_function (_one, _two):
    def connected(protocol):
        return protocol.callRemote(
            RemoteFunction,
            one=_one,
            two=_two
            )
    return ClientCreator(reactor, AMP).connectTCP('127.0.0.1', 8750).addCallback(lambda p: connected(p))
于 2013-07-05T21:07:11.183 に答える
0

おそらくどこwaitの結果も呼び出していません。send_fence_to_device

また、おそらく物事を壊すsend_fence_to_device呼び出しがまだあります。reactor.stop

https://pypi.python.org/pypi/crochetにある例など、より単純な例を最初に試すと役立つ場合があります。その各部分が何をしているのかを理解すれば、より複雑なアプリケーションのデバッグが容易になるかもしれません。

また、あなたの質問にはhttp://sscce.org/が含まれていないため、これはすべて当て推量です (少なくとも Twisted の経験から情報を得ていますが、Crochet の経験はありません)。将来的には、質問をhttp://sscce.org/に投稿することを検討してください。これにより、回答を得るために必要な推測が少なくなります。これを行うと、回答を提供してくれる人が増え、回答の質が向上する可能性があります。

于 2013-07-05T16:53:41.567 に答える