AttributeError: объект EventualResult не имеет атрибута 'status_code'

Вопрос:

Я запускаю представление 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')

Лучший ответ:

Ответ — фабрика, функция django — это две разделенные функции, одна из которых является общей функцией y, состоящей из скрученной функции, а скрученная будет работать в реакторе, а функция 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))

Ответ №1

Вероятно, вы не send_fence_to_device 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/ с вашим вопросом, чтобы не допустить догадок для ответа. Вы можете найти больше людей, желающих дать ответы, если вы это сделаете, и ответы могут быть более качественными.

Оцените статью
TechArks.Ru
Добавить комментарий