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