我正在尝试自定义登录,注册,忘记用户名和重置密码表单的外观。我首选的解决方案是直接使用HTML表单,这可能需要创建新的功能和视图。此时,我不需要自定义字段。
不完全确定如何完成此操作(特别是如何处理从表单提交的数据)。有没有人有这方面的经验,可以分享他们的方法?
更新 - 使用安东尼的建议解决了这个问题。登录实现如下所示:
<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}}
答案 0 :(得分:4)
您仍应使用服务器端的标准Auth
表单 - 然后只需自定义字段在视图中的显示方式。有多种方法可以自定义表单(与其他任何SQLFORM
相同的原则适用于Auth表单。)
最简单的方法是编写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}}