登录的视图函数
def user_login(request):
'''
用户登录
:param request:
:return:
'''
if request.method == 'POST':
loginform = LoginForm(request.POST)
if loginform.is_valid():
cleaned_data = loginform.cleaned_data
user = authenticate(username=cleaned_data['username'], password=cleaned_data['password'])
if user:
if user.is_active:
login(request,user)
print request.session
return redirect(reverse('index'))
else:
pass
else:
pass
else:
loginform = LoginForm()
context = {
'loginform': loginform,
}
return render(request, 'account/login.html', context=context)
前端模版代码
<form class="login-form" action="{% url 'account:user_login' %}" method="post">
{%csrf_token%}
{{ loginform.non_field_errors.as_text }}
<div class="input-group">
{{ loginform.username }}
<label for="id_username" class="input-label">
<span class="label-title">用户名</span>
</label>
</div>
<div class="input-group">
{{ loginform.password }}
<label for="id_password" class="input-label">
<span class="label-title">密码</span>
</label>
</div>
<input id="submit" type="submit" class="login-button" value="登录"/>
</form>
form代码
class LoginForm(forms.Form):
username = forms.CharField(label='用户名', min_length=2, max_length=20, required=True, widget=forms.widgets.Input(attrs={'class': 'input-field'}))
password = forms.CharField(label='密码', min_length=5, max_length=20, required=True, widget=forms.widgets.PasswordInput(attrs={'class': 'input-field'}))
def clean_password(self):
pwd_len = 10 # 密码不能小于6个字符
cleaned_data = self.cleaned_data['password']
if len(cleaned_data) <= pwd_len:
raise forms.ValidationError('密码必须大于10个字符!')
return cleaned_data
问题:输入密码小于10个字符的时候, {{ loginform.non_field_errors.as_text }}没有显示任何报错信息
还有一个问题,其他错误,是不是要用变量传递到模版,比如下面代码,用户被禁用这些错误信息是不是要用变量保存错误信息并传递到模版
if user:
if user.is_active:
login(request,user)
print request.session
return redirect(reverse('index'))
else:
pass
else:
pass
其实建议初学者尽量去过一遍文档,不用都记下来,大概知道有哪些内容就行。
以后根据遇到的问题去看对应文档就好了,比如这个form error的使用:
https://docs.djangoproject.com/en/2.1/topics/forms/#rendering-fields-manually