使用CGI Python将网页重定向到主页面

时间:2011-05-25 10:25:47

标签: python html forms cgi

作为我的第一个网络应用,我开发了一个非常简单的调查。每当页面刷新时,都会向用户询问随机问题。使用post将答案发送到cgi脚本以将答案保存到数据库中。

然而,当用户按下提交按钮时,它会自动转到负责处理数据的页面,因为它没有任何输出,所以它是一个空白页面。现在,如果用户想要回答另一个问题,他们必须按下浏览器中的“后退”并刷新页面,以便弹出一个新问题。我不想要这个。

我想要的方式是,当用户按下提交时,答案会自动转到处理脚本,页面会自动刷新一个新问题,或者至少在处理后会重新定向到主调查页面并显示新问题。

3 个答案:

答案 0 :(得分:7)

您还可以从处理脚本发送HTTP标头:

Location: /

处理完答案后,您将发送上述标题。我建议你附加一个随机数查询字符串。例如python示例(假设您使用的是python CGI模块):

#!/usr/bin/env python
import cgitb
import random
import YourFormProcessor

cgitb.enable() # Will catch tracebacks and errors for you. Comment it out if you no-longer need it.

if __name__ == '__main__':
  YourFormProcessor.Process_Form() # This is your logic to process the form.

  redirectURL = "/?r=%s" % random.randint(0,100000000)

  print 'Content-Type: text/html'
  print 'Location: %s' % redirectURL
  print # HTTP says you have to have a blank line between headers and content
  print '<html>'
  print '  <head>'
  print '    <meta http-equiv="refresh" content="0;url=%s" />' % redirectURL
  print '    <title>You are going to be redirected</title>'
  print '  </head>' 
  print '  <body>'
  print '    Redirecting... <a href="%s">Click here if you are not redirected</a>' % redirectURL
  print '  </body>'
  print '</html>'

答案 1 :(得分:6)

您想要实现此目的:https://en.wikipedia.org/wiki/Post/Redirect/Get

它比听起来简单得多。接收POST的CGI脚本必须只生成以下输出:

Status: 303 See other
Location: http://lalala.com/themainpage

答案 2 :(得分:0)

<html> 
  <head> 
    <meta http-equiv="refresh" content="0;url=http://www.example.com" /> 
    <title>You are going to be redirected</title> 
  </head> 
  <body> 
    Redirecting...
  </body> 
</html>

请参阅meta-refresh缺点和替代方案here