Web2py:自定义授权表单

Web2py: Customizing Auth Forms

我正在尝试自定义登录、注册、忘记用户名和重设密码表单的外观。我的首选解决方案是直接使用 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}}

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

最简单的方法是编写一个 formstyle 函数(例如,将其命名为 auth_formstyle),然后执行:

auth.settings.formstyle = auth_formstyle

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

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

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}}