1.简介
ModelForm模块是 model和form的结合
下面看使用方法
模型设计
from django.forms import ModelForm
class Blog(models.Model):
title = models.CharField(blank=False, max_length=40, unique=True, verbose_name='标题')
body = models.TextField(verbose_name='内容')
create_time = models.DateTimeField(verbose_name='时间', auto_now_add=True)
def __str__(self):
return self.title
class BlogModelForm(ModelForm):
class Meta:
model = Blog 绑定模型
fields = '__all__' 展示全部字段
模型表单一体化
前端文件
<form action="/app/modelform/" method="post"> 接口路由
{% csrf_token %}
<table>
{{obj}}
{{error}}
</table>
<input type="submit" value="提交">
</form>
设计免于csrf安全认证
显示错误信息
后端接口
def form(request):
if request.method == 'POST':
obj = models.BlogModelForm(request.POST)
if obj.is_valid(): 判断是否通过验证
post = obj.save(commit=False) 模型保存
post.create_time = datetime.now()
post.save() 数据库保存
return HttpResponse('成功')
return render(request, 'index.html', {'error': obj.errors})
显示提示信息
else:
obj = models.BlogModelForm() 实例化空表单
return render(request, 'index.html', {'obj': obj})
实验效果
2.设计验证码模块
安装模块完成配置
pip install django-simple-captcha == 0.5.5
在 settings文件中 INSTALLED_APPS 处添加 captcha
从路由文件配置
url('^captcha/', include('captcha.urls'))
form表单内配置
{% csrf_token %} 防止POST请求被拦截
<div class="form-group marb8 captcha1">
<label>验 证 码</label>
{{ register_form.captcha }}
</div>
前端显示的部分
注释: register_form = Registerform(request.POST) 设计的form表单
表单模型设计字段
captcha = CaptchaField()
效果如下
3.表单部分字段验证
class Registerform(forms.Form):
email = forms.EmailField(required=True)
password = forms.CharField(max_length=30, min_length=5)
captcha = CaptchaField()
def clean_password(self):
if len(self.cleaned_data['password']) != 6:
raise forms.ValidationError('密码格式不正确')
ModelForm同样可以完成自动验证
注意: 自定义验证方法名为 clean_ + 验证字段名
4.收藏功能实现
若用户此时已经处于登录状态
request.user 可获得当前用户对象
request.user.is_authenticated() 可判断是否通过认证
前提是使用 django 自带的User模型