【问题标题】:Partial page render, use webapp2 post request handler to pass a msg部分页面渲染,使用 webapp2 post request handler 传递一个 msg
【发布时间】:2015-05-14 18:57:18
【问题描述】:

我刚刚开始掌握 GAE 上的 jinja2 模板。我正在尝试做的是在渲染的模板中显示状态消息,而无需再次渲染整个模板。

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

我渲染模板并将 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'}))

谢谢, 丹尼斯

【问题讨论】:

  • 你正在做的很好。如果没有在客户端运行一些javascript,管理数据的POST,然后只更新页面的该组件,您就无法像您建议的那样传递消息。因此你必须渲染它来改变它。 en.wikipedia.org/wiki/Ajax_%28programming%29
  • 感谢您告诉我。我从一个现有的应用程序中移植了这段代码,该应用程序是我使用更新面板在 asp.net 中编写的。我认为 jinja2 模板可以提供类似的东西。我会考虑在客户端做一些事情,因为我不希望整个页面重新加载。
  • np。这可能会有所帮助:django-rest-framework.org
  • 我之前看过这个但决定但是在 Eclipse IDE 上设置 django 以与 Google App Engine 插件一起使用的麻烦是不值得的。对于大多数简单的应用程序来说,Django 可能有点矫枉过正,我真的很喜欢 jinja2 框架的速度。我通过对邮件服务的 AJAX 调用解决了这个问题。

标签: google-app-engine post webapp2 requesthandler


【解决方案1】:

Paul Collingwood(不是我认为的达勒姆板球运动员)通过建议应该通过 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);
    }
})}

这是 serer 上的 mailService webapp2 requesthandler,它在处理完邮件后发回响应:

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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 2016-05-17
    • 2019-06-20
    相关资源
    最近更新 更多