почему POST не видит атрибут, установленный в GET - PullRequest
0 голосов
/ 21 ноября 2018

Я не понимаю, почему метод POST в GAE не видит атрибут, установленный в GET, когда GET запускается до POST.Ниже приводится простая иллюстрация:

app.yaml


application: post-does-not-see-get
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: index.py

index.py


import logging
import wsgiref.handlers
from google.appengine.ext import webapp

class MainHandler(webapp.RequestHandler):

  formstring = '''<form method="post" action="/">
<p>Enter sth: <input type="text" name="sth"/></p>
<p><input type="submit"></p></form>'''

  def get(self):
    self.a=5
    logging.info('a: '+str(self.a))
    self.response.out.write(self.formstring)

  def post(self):
    self.response.out.write('<p>'+self.a+'</p>\n')
    self.response.out.write(self.formstring)

def main():
  application = webapp.WSGIApplication(
      [('/.*', MainHandler)],      debug=True)
  wsgiref.handlers.CGIHandler().run(application)

if __name__ == '__main__':
  main()

whileниже показано, что сообщение видит изменения, сделанные в get

class B:
    a=3
    def get(self):
        self.a=4
    def post(self):
        print('a from post: '+str(self.a))

q=B()
q.post()
q.get()
q.post()

1 Ответ

0 голосов
/ 21 ноября 2018

Не пытайтесь хранить состояние в классах по запросам.GAE, как и большинство веб-сред, выполняет несколько процессов - возможно, в нескольких отдельных контейнерах или даже центрах обработки данных - для обслуживания ваших запросов.Нет абсолютно никакой гарантии, что последующие запросы будут обслуживаться одним и тем же процессом.

Сохранение постоянных данных в хранилище данных или в memcache.Webapp имеет инфраструктуру сессий , которая может помочь с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...