1.forms模块
- 通过forms模块获取表单数据
- 通过forms.Formde子类的构造器来接收post数据
- form = RemarkForm(request.POST)
2.必须使form通过验证,才能取值
- form.is_valid()
- 返回True:通过验证
- 返回False:为通过验证
3.获取表单数据
- 通过 form.cleaned_data 来接收表单数据
4.forms模块的高级处理
- 将 models 和 Forms 结合到一起使用
- 在forms.py中创建class继承自 forms.ModelForm
5.创建内部类 Meta,关联Model
- model : 指定要关联的实体类
- fields : 指定从Model中取哪些字段生成控件取值为 “_ _ all _ _"
6.labels : 指定每个属性对应的label值
取值为字典
labels = {
‘uname’:‘登录名称’,
… …
}
划一划form表单
from django import forms
from user.models import User
from user.models import Profile
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ['nickname', 'gender', 'birthday', 'location']
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = '__all__'
#返回的是字典类型,进行清洗,变成PEP8标准格式
def clean_max_distance(self):
#super调用父类的方法
cleaned_data = super().clean()
max_distance = cleaned_data['max_distance']
min_distance = cleaned_data['min_distance']
#判断输入的最大值和最小值是否满足要求
if max_distance < min_distance:
raise forms.ValidationError('max_distance 必须大于等于 min_distance')
else:
return max_distance
def clean_max_dating_age(self):
cleaned_data = super().clean()
max_dating_age = cleaned_data['max_dating_age']
min_dating_age = cleaned_data['min_dating_age']
if max_dating_age < min_dating_age:
raise forms.ValidationError('max_dating_age 必须大于等于 min_dating_age')
else:
return max_dating_age
def modify_profile(request):
'''修改个人资料、交友资料'''
#定义两个Form表单
user_form = forms.UserForm(request.POST)
profile_form = forms.ProfileForm(request.POST)
#检查user_form和profile——form
if not user_form.is_valid() or not profile_form.is_valid():
errors = {}
errors.update(user_form.errors)
errors.update(profile_form.errors)
return render_json(errors, err.PROFILE_ERR)
#更新user
# update user set nickname='xxx', gender='male' where id=1;
User.objects.filter(id=request.uid).update(**user_form.cleaned_data)
#更新或创建profile
Profile.objects.update_or_create(id=request.uid,defaults=profile_form.cleaned_data)
return render_json()