刷新后确认表格重新提交的网页重新提交到表格上

时间:2016-02-04 20:42:07

标签: forms refresh web2py

每当我提交表单时,它都有效。如果我尝试刷新页面,它会问:

click to see

然后如果我点击继续,它会再次将数据重新提交到表格中。所以基本上我问我如何在点击刷新后阻止它重新提交数据到表中?可以停下来吗?我在这里错过了什么吗?我可以以某种方式绕过这个吗?

我的sqldb表:

table

  

索引

def index():
if request.vars:
    sqldb.uevent.insert(name=request.vars.name, latitude=request.vars.lat, longitude=request.vars.lng, phone=request.vars.phone, description=request.vars.description)
  

视图

<form method="post">
                  <div class="form-group">
                      <label>Name of Uevent:</label>
                      <input class="form-control" id="formName" placeholder="Uevent..." name="name">
                  </div>
                  <div class="form-group">
                     <input type="hidden" class="form-control" id="formLat" name="lat">
                  </div>
                  <div class="form-group">
                    <input type="hidden" class="form-control" id="formLong" name="lng">
                  </div>
                  <div class="form-group">
                    <label>Phone:</label>
                    <input class="form-control" id="formPhone" placeholder="Phone..." name="phone">
                  </div>
                 <div class="form-group">
                    <label>Description of Uevent:</label>
                     <textarea class="form-control" rows="3" id="formDescription" placeholder="Description..." name="description"></textarea>
                  </div>
                 <button type="submit" class="btn btn-primary">Submit</button>
                 <button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
             </form>
  

模型

sqldb.define_table('uevent',
               Field('name', label="Name"),
               Field('latitude', 'float', label="Latitude",readable=False),
               Field('longitude', 'float', label="Longitude",readable=False),
               Field('phone', label="Phone"),
               Field('description', 'text' ,label="Description", default="No Description"),
               Field('appropriate', label="Appropriate",writable=False,readable=False))

1 个答案:

答案 0 :(得分:0)

简短的回答是,您不应在POST请求后刷新浏览器页面(例如,典型的表单提交),因为您指示浏览器重新提交POST(这就是浏览器弹出警告的原因 - - 您通常不希望多次发布相同的数据。)

在web2py端,如果使用FORMSQLFORM帮助程序,则可以阻止重复的数据库插入。默认情况下,它们会向表单添加一个唯一的Office.initialize = function (reason) { ... }; 字段,以防止CSRF攻击并防止多次提交相同的表单。

如果您不想使用web2py表单助手,您可以自己编写类似的逻辑。只需使用您还存储在会话中的唯一键向表单添加隐藏字段(每次请求页面时都必须生成新的唯一键)。提交表单时,请确保提交的密钥与会话中的值匹配。提交后,从会话中删除密钥,以便后续提交的任何内容都将被拒绝。