我实施了Login
,除了错误消息外,它的效果很好。
如果我使用{{ form.as_p }}
,则会显示错误消息。
<form id="loginform" class="form-horizontal" role="form" method="post" action="{% url 'users:login' %}">
{% csrf_token %}
<!-- id / pw -->
{{ form.as_p }}
<div class="form-group">
<!-- Button -->
<div class="btn-controls">
<div class="row">
<input id="btn-login" class="btn btn-success" type="submit" name="login_submit" value="로 그 인" />
<input type="hidden" name="next" value={{ request.GET.next}} />
<a id="btn-fblogin" href="{% url 'social:begin' backend='facebook' %}" class="btn btn-primary col-xs-12"><i class="icon-facebook"></i> 1초만에 페이스북으로 로그인 </a>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-12 control">
<div class="signup">
아직 차차다방 회원이 아니세요?  
<a href="#" id="signuplink"> 가입하기 </a>
</div>
<div class="forget">
<a href="#"> 비밀번호를 잊어버리셨나요? </a>
</div>
</div>
</div>
</form>
但是当我更改这样的模板时,当我输入错误的id或pw时,它不显示任何错误...
<form id="loginform" class="form-horizontal" role="form" method="post" action="{% url 'users:login' %}">
{% csrf_token %}
<div class="input-group">
<span class="input-group-addon"><i class="icon-user"></i></span>
<input id="id_username" type="text" class="form-control" name="username" value="" placeholder="username">
</div>
<div class="input-group">
<span class="input-group-addon"><i class="icon-lock"></i></span>
<input id="id_password" type="password" class="form-control" name="password" placeholder="password">
</div>
<div class="form-group">
<!-- Button -->
<div class="btn-controls">
<div class="row">
<input id="btn-login" class="btn btn-success" type="submit" name="login_submit" value="로 그 인" />
<input type="hidden" name="next" value={{ request.GET.next}} />
<a id="btn-fblogin" href="{% url 'social:begin' backend='facebook' %}" class="btn btn-primary col-xs-12"><i class="icon-facebook"></i> 1초만에 페이스북으로 로그인 </a>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-12 control">
<div class="signup">
아직 차차다방 회원이 아니세요?  
<a href="#" id="signuplink"> 가입하기 </a>
</div>
<div class="forget">
<a href="#"> 비밀번호를 잊어버리셨나요? </a>
</div>
</div>
</div>
</form>
即使我没有用户{{ form.xx }}
,如何让它显示错误消息?
这是我的LoginView
。
from django.utils.http import is_safe_url
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import REDIRECT_FIELD_NAME, login as auth_login
from django.utils.decorators import method_decorator
from django.views.decorators.cache import never_cache
from django.views.decorators.csrf import csrf_protect
from django.views.decorators.debug import sensitive_post_parameters
from django.views.generic import FormView
from users.forms import MyUserCreationForm
class LoginView(FormView):
form_class = AuthenticationForm
redirect_field_name = REDIRECT_FIELD_NAME
# template_name is fake one.
# This view only process POST request from users/login_signup.html
template_name = "users/login_signup.html"
@method_decorator(sensitive_post_parameters('password'))
@method_decorator(csrf_protect)
@method_decorator(never_cache)
def dispatch(self, request, *args, **kwargs):
# Sets a test cookie to make sure the user has cookies enabled
request.session.set_test_cookie()
return super(LoginView, self).dispatch(request, *args, **kwargs)
def form_valid(self, form):
auth_login(self.request, form.get_user())
# If the test cookie worked, go ahead and
# delete it since its no longer needed
if self.request.session.test_cookie_worked():
self.request.session.delete_test_cookie()
return super(LoginView, self).form_valid(form)
def get_context_data(self, *args, **kwargs):
context = super(LoginView, self).get_context_data(*args, **kwargs)
return context
def get_success_url(self):
return self.request.POST.get("next")
答案 0 :(得分:0)
我没有得到你的问题到底是什么,也不知道这是不是你的答案,但我只是说出来了!
您应该使用您在模板中从视图传递的django表单,以便在提交表单后验证表单。
如果您关心的是如何以您想要的方式正确显示表单,那么它还有另一种解决方案。您可以按照您想要的方式表示表格,如下所示:
{% for field in form %}
<div class="input-group">
{% if field.name=="username" %}
<span class="input-group-addon"><i class="icon-user"></i></span>
<input id="id_username" type="text" class="form-control" name="username" value="" placeholder="username">
{% endif %}
{% if field.name=="password" %}
<span class="input-group-addon"><i class="icon-lock"></i></span>
<input id="id_password" type="password" class="form-control" name="password" placeholder="password">
{% endif %}
{% for error in field.errors %}
{{ error }}
{% endfor %}
</div>
{% endfor %}
如您所见,您可以通过field.errors访问字段错误,并使用field.name检查字段名称。