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模型