谷歌应用引擎-部分页面渲染,使用webapp2 post请求处理器传递消息



我刚刚开始掌握GAE上的jinja2模板。我想做的是在渲染模板中显示状态信息,而不需要再次渲染整个模板。

我有一个webapp2请求处理程序,它处理发送邮件。在错误异常的情况下,我想在页面上显示一条消息。如果邮件已成功发送,则同上。

我呈现模板并传递msg作为模板值。我可以看到,当整个模板再次渲染时,这不是做事情的方式。我要做的就是简单地传递msg。

class ContactoPage(webapp2.RequestHandler):
global template
template = jinja_environment.get_template('contacto.html')
def get(self):
    self.response.out.write(template.render({'mail_status':''}))
def post(self):
    userMail=self.request.get("emailFrom")
    if not mail.is_email_valid(userMail):
        self.response.out.write(template.render({'mail_status':'wrong mail address'}))
        return      
    subject="Test Mail"
    userMessage=self.request.get("emailBody")
    message=mail.EmailMessage(sender="dennisargeomatica@gmail.com",subject="Test")
    message.to=userMail
    message.body=("Thank you! n"
                  "Your mail: %s n"
                  "Subject: %s n"
                  "Message: %s n"
                  %(userMail,subject,userMessage))
    message.send()
    self.response.out.write(template.render({'mail_status':'rudy, a msg to you'}))

谢谢,丹尼斯

Paul Collingwood(我认为不是Durham板球运动员)建议用AJAX调用来解决这个问题,为我指出了正确的方向。来自ASP.net背景的我习惯了更新面板,并在jinja2框架中寻找类似的技术。这似乎不存在。值得庆幸的是,使用jQuery的AJAX调用非常简单。我从客户端的javascript中调用,如下所示:

function mailService() {
mailFrom = $('#tbFrom').val();
mailMsg = $('#tbMail').val();
$.ajax({
    type : 'POST',
    url : 'mailService',
    data : {
        mailFrom:mailFrom,
        mailMsg:mailMsg
    },
    success: function(response) {
        $('#mailStatus').html(response);
    }
})}

这是服务器上的webapp2请求处理程序,它在处理邮件后发送响应:

class MailService(webapp2.RequestHandler):
def post(self):
    mailFrom = self.request.get('mailFrom')
    mailMsg = self.request.get('mailMsg')
    if not mail.is_email_valid(mailFrom):
        self.response.write('wrong mail address')
        return
    message=mail.EmailMessage(sender='dennisargeomatica@gmail.com',subject='Your mail to Argeomatica')
    message.to=mailFrom
    message.body=('Thank you, we have received your mail. n'
                  'Message: %s n'
                   %(mailMsg))
    message.send()
    self.response.write('mail sent')

相关内容

  • 没有找到相关文章

最新更新