我正在使用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中)它们不是。
为什么会这样?任何解释?这是一个奇怪的问题,互联网上没有任何提示或建议
答案 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')