• django中如何优雅的处理一个多按钮的表单


    1.     一个表单多个按钮
    OA MATSUI 的问题:
    如过一个html表单,包含一个书的列表信息,有两个按钮,
    一个是添加,一个是修改,实现不同的功能,代码如下。
    <form action="/booklist/" method="post">
    <table border="1" width="80%">
    <tr>
    <th></th>
    <th>书名</th>
    <th>作者</th>
    <th>日期</th>
    </tr>
    {% for booklist in codelists %}
    {{ booklist.full_name|upper }}
    <tr>
    <td><input type="radio" name="value" value="{{ booklist.key }}"></td>
    <td>{{booklist.fstateid}}</td>
    <td>{{booklist.fstatename}}</td>
    <td>{{booklist.fnexttime}}</td>
    </tr>
    {% endfor %}
    </table>
    <p>
    <input type="submit" name="subsat" value="新增" class="button"></input>
    <input type="submit" name="subsat" value="编辑" class="button"></input>
    </form>

    我现在的做法是根据post信息中按钮的value值,判断用户点了什么按钮,修改根据post中的Key值。
    不太满意的地方是在 后端必须依靠两个按钮的utf-8编码,判断是"新增"还是"编辑",不是很
    直观和方便,请问是否有更好的办法(不用JS的情况下)。
    Forrest Liu 的解决办法:
    <input type="submit" name="new" value="新增" class="button"></input>
    <input type="submit" name="edit" value="编辑" class="button"></input>
    if request.POST.has_key("new"):
    .....
    if request.POST.has_key("edit"):


    Zhang Jiawei 的解决办法:
    一个表单,两个按钮,点击按钮的时候跑一下js, 修改表单的 action 地址。
    /booklist/edit
    /booklist/new
    这样你的 url mapping 可以对应到后台的两个 handler, 也就不用写什么 if/else 判断按钮了。

    如果你有10个按钮,写10个if/else 真是很悲惨的事情。再更进一步,我都希望你的那个按钮按下的时候,调用的是 ajax call,
    然后用 dom api 直接局部更新你的表单。

    2.     多个表单,同一个handler
    每个Form都有一个hidden
    <input id="action" name="action" type="hidden" value="add">
    <input id="action" name="action" type="hidden" value="edit">

    提交到同一个View,view里面这样判断:
    if request.POST['action'] == 'add':
    add
    elif request.POST['action'] == 'edit':
    edit


    我们的应用场景:
    下一步、保存并继续编辑 两种提交,是一个表单多个按钮

    我们现在的做法:
    <input id="action" name="action" type="hidden" value="">
    <input type="submit" value="保存并继续编辑" onclick="$('#action').attr('value', 'save');$('form').submit();" style="150px;height:40;font-size:14px;padding:5px;margin:10px;"/>
    <input type="submit" value="下一步" onclick="return checkform()" style="150px;height:40;font-size:14px;padding:5px;margin:10px;"/>


    用的是JS,不过不是更改form的action属性,而是更改的一个hidden的input的值。


    总结:用JS,等于将逻辑前移,在JS失效的时候会产生错误。对于一个表单多个按钮的情况,个人认为最好的处理方式是Forrest Liu 的解决办法。而多个表单,同一个handler的情况,用多个hidden的input来处理。
  • 相关阅读:
    Spring Security(十七):5.8 Method Security
    Spring Security(十六):5.7 Multiple HttpSecurity
    Spring Security(十五):5.6 Authentication
    Spring Security(十四):5.4 Authorize Requests
    Spring Security(十三):5.2 HttpSecurity
    Spring Security(十二):5. Java Configuration
    Spring Security(十一):4. Samples and Guides (Start Here)
    Spring Security(十):3. What’s New in Spring Security 4.2 (新功能)
    Spring Security(九):2.4.4 Checking out the Source(检查来源)
    Spring Security(八):2.4.3 Project Modules
  • 原文地址:https://www.cnblogs.com/crafter/p/2262908.html
Copyright © 2020-2023  润新知