<form method="post"> {% csrf_token %} {{if not username: raise forms.ValidationError('该用户名不存在!') if not password or not check_password: raise forms.ValidationError('缺少密码!') if password != check_password: raise forms.ValidationError('两次密码不一致') 前端怎么显示消息, form.as_p }} <button type="submit">提交</button></form>{% if form.errors %}<div class="alert alert-danger"> <ul> {% for field in form %} {% for error in field.errors %} <li>{{ error }}</li> {% endfor %} {% endfor %} {{ form.non_field_errors }} </ul></div>{% endif %}
时间: 2024-01-01 15:17:01 浏览: 141
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
这段代码存在语法错误,不应该把表单验证代码放在模板中。表单验证应该在后端的视图函数中进行,只有在验证失败时再将错误信息传递给前端模板进行渲染。下面是一个示例视图函数代码,用于在后端进行表单验证:
```python
from django.shortcuts import render
from django.contrib.auth import authenticate, login
from django import forms
class LoginForm(forms.Form):
username = forms.CharField(label='用户名', max_length=30)
password = forms.CharField(label='密码', widget=forms.PasswordInput)
def login_view(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
form.add_error(None, '用户名或密码错误')
else:
form = LoginForm()
return render(request, 'login.html', {'form': form})
```
在这个示例中,`LoginForm`是一个继承自`forms.Form`的表单类,用于定义表单中的字段以及验证规则。`login_view`是一个视图函数,用于处理用户登录请求。当用户提交表单时,后端会先对表单进行验证,如果表单验证失败,则会在表单中添加错误信息,然后再将表单传递给模板进行渲染。如果表单验证通过,则会使用`authenticate()`函数进行身份验证,如果验证成功则登录用户并重定向到主页,否则会在表单中添加错误信息并重新渲染模板。在模板中,可以使用与前面示例相同的方式来显示表单验证错误信息。
阅读全文