代码之家  ›  专栏  ›  技术社区  ›  datasci

Web2py:自定义身份验证表单

  •  2
  • datasci  · 技术社区  · 10 年前

    我正在尝试自定义登录、注册、忘记用户名和重置密码表单的外观。我的首选解决方案是直接使用HTML表单,这可能需要创建新的函数和视图。此时,我不需要自定义字段。

    不完全确定如何完成此操作(尤其是如何处理表单中提交的数据)。有没有人有完成这项工作的经验,可以分享他们的方法?


    更新-使用Anthony的建议解决了这个问题。登录实现如下所示:

    <form class="form-horizontal" method="post" style="margin-top:30px;">
      <div class="form-group">
        <label for="auth_user_username" class="col-sm-2 control-label">Username</label>
        <div class="col-sm-10">
          <input type="text" class="form-control" id="auth_user_username" name="username" placeholder="Enter username">
        </div>
      </div>
      <div class="form-group">
        <label for="auth_user_password" class="col-sm-2 control-label">Password</label>
        <div class="col-sm-10">
          <input type="password" class="form-control" id="auth_user_password" name="password" placeholder="Enter password">
        </div>
      </div>
      <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
          <div class="checkbox">
            <label>
              <input id="auth_user_remember_me" name="remember_me" type="checkbox"> Remember me
            </label>
          </div>
        </div>
      </div>
      <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
          <button type="submit" class="btn btn-default">Login</button>
        </div>
      </div>
    {{=form.custom.end}}
    
    1 回复  |  直到 10 年前
        1
  •  4
  •   Anthony    10 年前

    你仍然应该使用标准 Auth 表单--然后只需自定义字段在视图中的显示方式。有多种自定义表单的方法(与任何其他方法一样,相同的原则适用于Auth表单 SQLFORM ).

    最简单的方法是编写 formstyle 函数(例如,调用它 auth_formstyle ),然后执行以下操作:

    auth.settings.formstyle = auth_formstyle
    

    或者,您可以遵循所述方法 here 在视图中使用HTML自定义表单。您还可以编写完全自定义的HTML——在这种情况下,只需确保表单输入名称与服务器上使用的字段名称匹配,并替换结束 </form> 标记为 {{=form.custom.end}} (包括web2py表单处理和CSRF保护所需的隐藏字段)。

    如果继续使用单个 user 操作和视图,您可以使用视图中的逻辑根据特定的身份验证操作显示不同的表单:

    def user():
        return dict(form=auth())
    

    在/default/user.html视图中:

    {{if request.args(0) == 'login':}}
    [custom login form markup]
    {{elif request.args(0) == 'register':}}
    [custom register form markup]
    ...
    {{pass}}