1. 基本使用
from django import forms
class User(forms.ModelForm):
class Meta:
model = models.user # 对应的Model中的类
fields = "__all__" # 字段,如果是__all__,就是表示列出所有的字段
1.2 字段注册的三种方式
# 字段注册三种方式
fields = "__all__" # 字段,如果是__all__,就是表示列出所有的字段
exclude = None # 排除的字段
fields = ['username', 'password', 'code']
1.4. widget/labels使用一
from django import forms
class User(forms.ModelForm):
# 1. 重新定义字段与字段规则 #2. 自定义在前端显示的名字:labels #3. 帮助提示字段 help_texts = 'xx' #4.用法一 widget/labels
password = forms.CharField(labels='密码',
help_texts='xx',
max_length=11,
min_length=5,
widget=forms.PasswordInput(attrs={'xxx': 'c1'}))
code = forms.CharField(labels='验证码',
help_texts='xx',
max_length=11,
min_length=5,
widget=forms.PasswordInput(attrs={'xxx': 'c1'}))
class Meta:
model = models.user # 对应的Model中的类
# 字段注册三种方式
fields = "__all__" # 字段,如果是__all__,就是表示列出所有的字段
1.5. widget/labels使用二
from django import forms
class User(forms.ModelForm):
# 1. 重新定义字段与字段规则 #2. 自定义在前端显示的名字:labels #3. 帮助提示字段 help_texts = 'xx'
class Meta:
model = models.user # 对应的Model中的类
fields = "__all__" # 字段,如果是__all__,就是表示列出所有的字段
# widgets用法二:(总的widgets用法,可以单独在每个字段当中使用)
from django.forms import widgets
widgets = {
"username": widgets.Textarea(attrs={"class": "c1"}) # 还可以自定义属性
}
# labels用法二:,自定义在前端显示的名字
labels = {
"name": "用户名"
}
1.6 局部钩子/全局钩子
from django import forms
class User(forms.ModelForm):
# 1. 重新定义字段与字段规则 #2. 自定义在前端显示的名字:labels #3. 帮助提示字段 help_texts = 'xx'
class Meta:
model = models.user # 对应的Model中的类
fields = "__all__" # 字段,如果是__all__,就是表示列出所有的字段
# error_messages用法:
def clean_username(self):
# 跟form一样
return username
def clean(self):
# 跟form一样
return self.cleaned_data
1.7 整体使用
from django import forms
class User(forms.ModelForm):
# 1. 重新定义字段与字段规则 #2. 自定义在前端显示的名字:labels #3. 帮助提示字段 help_texts = 'xx'
password = forms.CharField(labels='密码',
help_texts='xx',
max_length=11,
min_length=5,
widget=forms.PasswordInput(attrs={'xxx': 'c1'}))
code = forms.CharField(labels='验证码',
help_texts='xx',
max_length=11,
min_length=5,
widget=forms.PasswordInput(attrs={'xxx': 'c1'}))
class Meta:
model = models.user # 对应的Model中的类
# 字段注册三种方式
fields = "__all__" # 字段,如果是__all__,就是表示列出所有的字段
error_messages = {
'username': {'required': "用户名不能为空", },
'password': {'required': "密码不能为空", },
}
from django.forms import widgets
widgets = {
"username": widgets.Textarea(attrs={"class": "c1"}) # 还可以自定义属性
}
def clean_username(self):
# 从cleaned_data中取出想要的数据
username = self.cleaned_data.get("username")
if "2b" in username:
# 错误就抛异常
raise ValidationError("不符合社会主义核心价值观!")
return username
# 通过Form表单的全局钩子函数来验证两次输入的密码是否正确
# 该clean方法, 在每个字段都校验通过之后才调用执行
# raise ValidationError self.add_error() 前者不会把错误的键值对,放回cleaned_data字典中,后者会放回cleaned_data字典中
def clean(self):
password = self.cleaned_data.get('password')
re_password = self.cleaned_data.get('re_password')
if password == re_password:
# 判断正确就返回校验过后的数据
return self.cleaned_data
self.add_error('re_password', '两次密码输入不一致')
1.8 view(普通使用)
def index(request):
if request.method == "GET":
obj = UserInfoModelForm()
return render(request,"index.html",{'obj':obj})
elif request.method == "POST":
obj = UserInfoModelForm(request.POST)
print(obj.is_valid()) # 这是方法,别忘记了加括号
print(obj.cleaned_data)
print(obj.errors)
return render(request,"index.html",{'obj':obj})
1.9 不需要用户添加的字段,但是需要在后端添加
def auction_item_add_view(request, pk):
"""添加拍品"""
auction_object = models.Auction.objects.filter(id=pk).first()
if request.method == 'GET':
form = AuctionItemAdd()
return render(request, 'auction_item_add.html', context={'form': form, 'auction_object': auction_object})
form = AuctionItemAdd(data=request.POST, files=request.FILES)
if form.is_valid():
# 保存之前,需要把用户不用传的数据,填上
form.instance.auction = auction_object
form.instance.uid = datetime.datetime.now().strftime('%Y%m%d%H%M%S%f')
form.save()
return JsonResponse({'status': 201})
return JsonResponse({'status': 400})
2.0 get请求的参数,post需要用
def auction_item_add_view(request, pk):
"""添加拍品"""
auction_object = models.Auction.objects.filter(id=pk).first()
if request.method == 'GET':
form = AuctionItemAdd()
return render(request, 'auction_item_add.html', context={'form': form, 'auction_object': auction_object})
form = AuctionItemAdd(data=request.POST, files=request.FILES)
if form.is_valid():
# 保存之前,需要把用户不用传的数据,填上
form.instance.auction = auction_object
form.instance.uid = datetime.datetime.now().strftime('%Y%m%d%H%M%S%f')
form.save()
return JsonResponse({'status': 201})
return JsonResponse({'status': 400})
2.1 前端传文件类型数据,后端接受
form = AuctionItemAdd(data=request.POST, files=request.FILES)