Как получить обновленное значение переменной класса в Django

Здравствуйте~ У меня проблемы с получением обновленного значения переменной класса.

Когда ConnectTestAPI вызывается после выполнения функции "p_request", переменные класса "result" и "orderNo" должны быть обновлены в функции "post".

Затем я хочу получить обновленное значение переменных класса с помощью цикла while в функции "p_request".

Однако, несмотря на установку значений переменных класса с помощью запроса post, когда выполняется оператор while, соответствующие значения все еще пустые и 0 соответственно,

поэтому оператор while не может быть завершен и приводит к ошибке тайм-аута. Вот мой исходный код. Спасибо заранее!!!!

class ConnectTestAPI(APIView):
   result=""
   orderNo=0
   
   def post(self, request):
      data = request.data
      ConnectTestAPI.result = data['result'] 
      ConnectTestAPI.orderNo = data['orderNo'] 
      print(ConnectTestAPI.result) # I could successfully get data from POST request here!
      print(ConnectTestAPI.orderNo) # I could successfully get data from POST request here!
      return HttpResponse("ok")

   def p_request():
      data = {
         "a" : 1234,
         "b" : 5678
      }
      data = json.dumps(data,ensure_ascii=False).encode('utf-8')
      con = redis.StrictRedis(outside_server['ip'],outside_server['port'])
      con.set("data_dict", data)
      while True:
         if ConnectTestAPI.result != "" and ConnectTestAPI.orderNo != 0:
            break
      res_result = ConnectTestAPI.result
      res_orderNo = ConnectTestAPI.orderNo
      return res_result, res_orderNo

Вам необходимо получить доступ к переменным класса, используя self:

class ConnectTestAPI(APIView):
   result=""
   orderNo=0
   
   def post(self, request):
      data = request.data
      self.result = data['result'] 
      self.orderNo = data['orderNo'] 
      print(self.result) # I could successfully get data from POST request here!
      print(self.orderNo) # I could successfully get data from POST request here!
      return HttpResponse("ok")

   def p_request():
      data = {
         "a" : 1234,
         "b" : 5678
      }
      data = json.dumps(data,ensure_ascii=False).encode('utf-8')
      con = redis.StrictRedis(outside_server['ip'],outside_server['port'])
      con.set("data_dict", data)
      while True:
         if self.result != "" and self.orderNo != 0:
            break
      res_result = self.result
      res_orderNo = self.orderNo
      return res_result, res_orderNo

ПРИМЕЧАНИЕ: Такое использование атрибутов класса не рекомендуется. Вы изменяете атрибут класса, что имеет побочные эффекты для всех экземпляров этого класса. В вашем случае подойдет обычный атрибут, инициализированный внутри __ init__():

class ConnectTestAPI(APIView):
   def __init__(self):
      self.result=""
      self.orderNo=0
   
   def post(self, request):
      data = request.data
      self.result = data['result'] 
      self.orderNo = data['orderNo'] 
      print(self.result) # I could successfully get data from POST request here!
      print(self.orderNo) # I could successfully get data from POST request here!
      return HttpResponse("ok")

   def p_request():
      data = {
         "a" : 1234,
         "b" : 5678
      }
      data = json.dumps(data,ensure_ascii=False).encode('utf-8')
      con = redis.StrictRedis(outside_server['ip'],outside_server['port'])
      con.set("data_dict", data)
      while True:
         if self.result != "" and self.orderNo != 0:
            break
      res_result = self.result
      res_orderNo = self.orderNo
      return res_result, res_orderNo
Вернуться на верх