python self.session无法正确保存数据

时间:2017-06-14 23:37:44

标签: python forms google-app-engine session

我正在使用Google App Engine和Python开发一个webapp。 我面临一个奇怪的问题,我不知道如何解决它,以及是什么导致它。 当我填写表格时,我会发送数据进行检查。如果它们不完整且某些字段遗漏,则服务器会发回表单并提供“填写所有字段!”的建议。

这很好用。

我要做的是将表单发送回“description”和“title”字段,填写用户在提交表单之前所写的内容,因此他必须只填写未填充的字段(并且他不会不需要从头开始重写所有内容。

这就是代码:

class SaleAnnCheck(BaseHandler):
  def post(self):
    title = self.request.POST.get('title')
    cat = self.request.POST.get('cat')
    description = self.request.POST.get('description')
    AcqOpt = self.request.POST.get('AcqOpt')
    lat = self.request.POST.get('lat')
    lng = self.request.POST.get('lng')
    image1 = self.request.POST.get("file1", None)
    image2 = self.request.POST.get("file2", None)
    image3 = self.request.POST.get("file3", None)
    logging.info("info sale announcment")
    logging.info(title)
    logging.info(cat)
    logging.info(description)
    logging.info(AcqOpt)
    logging.info(lat)
    logging.info(lng)
    logging.info(image1)
    logging.info(image2)
    logging.info(image3)
    self.session["ECommerceUser"]["description"]=description
    self.session["ECommerceUser"]["title"]=title
    logging.info('session')
    logging.info(self.session["ECommerceUser"])
    if title == '' or cat == None or description == '' or AcqOpt == None or lat == '' or lng == '':
      error = 'empty'
      urlR='/CreateSaleAnn?'+urllib.urlencode({'error':'empty'})
      self.redirect(urlR)


class Create(BaseHandler):
  def get(self):
    error = self.request.get('error')
    if error == 'empty':
      logging.info('sbagliato')
      logging.info(self.session["ECommerceUser"])
      template = JINJA_ENVIRONMENT.get_template('templates/CreateAnnouncement.html')
      w = self.response.write
      w(template.render({'error':'FILL ALL THE MANDATORY FIELDS!', 'description': self.session["ECommerceUser"]["description"], 'title':  self.session["ECommerceUser"]["title"]}))
    else:
      logging.info('giusto')    
      logging.info(self.session["ECommerceUser"])   
      template = JINJA_ENVIRONMENT.get_template('templates/CreateAnnouncement.html')
      w = self.response.write
      w(template.render({'description': self.session["ECommerceUser"]["description"], 'title':  self.session["ECommerceUser"]["title"]}))

当我提交表单时,通过向特定URL发出HTTP发布请求来检查内容,由SaleAnnCheck处理。

说明和标题正确保存在会话中(我通过在日志中打印self.session [“ECommerceUser”]的内容来检查它)。然后,如果未填写字段,则服务器将通过对相关URL的GET请求再次重定向到表单页面。

对该URL的请求由Create处理。但是当我尝试使用之前输入的描述和标题值来渲染表单的HTML模板(使用jinja2)时,相关的文本区域没有填充该值。 之所以发生这种情况,是因为self.session [“ECommerceUser”] [“description”]和self.session [“ECommerceUser”] [“title”]都是空的,但在我之前检查过它们时(在SaleAnnCheck中)它们不是。

为什么会这样?任何解释?这是一个奇怪的问题,互联网上没有任何提示或建议

1 个答案:

答案 0 :(得分:0)

这是因为' self.session'它不是一个Session,它只是一个类变量,在类之外是不可读的。如果您真的想使用持久会话来存储变量,请尝试以下方法:

来自文档: http://docs.python-requests.org/en/master/user/advanced/

s = requests.Session()

s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get('http://httpbin.org/cookies')