标签:usermod query rect add mail ice poll search choices
1.前端的ajax代码不用改动
2.modelform,在原来基础上稍作改动
from django import forms
from app01.models import UserInfo
from django.forms import widgets as wid
from django.core.exceptions import ValidationError
import re
class UserModelForm(forms.ModelForm):
r_password = forms.CharField(min_length=5, label="确认密码", widget=wid.PasswordInput(),
error_messages={
"required": "确认密码不能为空!",
"min_length": "确认密码不能少于5位!"
}
)
class Meta:
model=UserInfo
fields=["username","password","r_password","email"]
labels={
"username":"用户名",
"password":"密码",
"email":"邮箱"
}
error_messages={
"username":{"required":"用户名不能为空!",
"min_length":"用户名不能少于5位!"},
"password":{"required":"密码不能为空!",
"min_length": "密码不能少于5位!"},
"email":{"required":"邮箱不能为空!",
"invalid":"邮箱格式错误!"}
}
widgets={"password":wid.PasswordInput()}
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
for field in self.fields.values():
field.widget.attrs.update({"class":"form-control"})
def clean_username(self):
val = self.cleaned_data.get("username")
user_obj = UserInfo.objects.filter(username=val).first()
if user_obj:
raise ValidationError("该用户已经存在!")
else:
return val
def clean_password(self):
val = self.cleaned_data.get("password")
if val.isdigit():
raise ValidationError("密码不能是纯数字!")
else:
return val
def clean_email(self):
val = self.cleaned_data.get("email")
ret = re.search("\w+@163.com$",val)
if ret:
return val
else:
raise ValidationError("邮箱必须是163邮箱!")
def clean(self):
password = self.cleaned_data.get("password")
r_password = self.cleaned_data.get("r_password")
if password and r_password and password != r_password:
self.add_error("r_password",ValidationError("两次密码输入不一致!"))
else:
return self.cleaned_data
3.视图函数,稍微一改
def reg(request):
# 注册功能
if request.method == "POST":
ret = json.loads(request.body)
form = UserModelForm(ret)
res = {"status":200,"err_msg":""}
if form.is_valid():
form.save()
# del ret["r_password"]
# UserInfo.objects.create_user(**ret)
else:
res["status"] = 201
res["err_msg"] = form.errors
return JsonResponse(res)
else:
form = UserModelForm()
return render(request,"reg.html",{"form":form})
modelform的使用
(1) model的知识点:
class UserInfo(AbstractUser):
tel=models.CharField(max_length=32)
gender=models.IntegerField(choices=((1,"男"),(2,"女")),default=1)
yuan=UserInfo.objects.get(pk=1)
yuan.get_gender_display()
(2) modelform使用
model.py:
class Book(models.Model):
nid=models.AutoField(primary_key=True)
title=models.CharField(max_length=32)
price=models.DecimalField(max_digits=8,decimal_places=2) # 999999.99
pub_date=models.DateTimeField() # "2012-12-12"
# comment_count=models.IntegerField(default=100)
# poll_count=models.IntegerField(default=100)
publish=models.ForeignKey(to="Publish",on_delete=models.CASCADE) # 级联删除
authors=models.ManyToManyField(to="Author")
def __str__(self):
return self.title
form.py:
# 构建modelform
class BookModelForm(forms.ModelForm):
class Meta:
model=Book
fields="__all__"
‘‘‘
BookModelForm等同于:
class BookForm(forms.Form):
title=forms.CharField(max_length=32)
price=forms.IntegerField()
pub_date=forms.DateField(widget=widgets.TextInput(attrs={"type":"date"}))
#publish=forms.ChoiceField(choices=[(1,"AAA"),(2,"BBB")])
publish=forms.ModelChoiceField(queryset=Publish.objects.all())
authors=forms.ModelMultipleChoiceField(queryset=Author.objects.all())
‘‘‘
逻辑:
添加书籍:
def add(reqeust):
if GET请求:
form=BookModelForm()
return render(reqeust,{"form":form})
‘‘‘
渲染页面
<form action="" method="post" novalidate>
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="title">{{ field.label }}</label>
{{ field }}
<span>{{ field.errors.0 }}</span>
</div>
{% endfor %}
<input type="submit" value="提交" class="btn btn-default pull-right">
</form>
‘‘‘
else POST请求:
form=BookModelForm(request.POST)
if form.is_valid():
form.save() # Book.objects.create(clean_data)
return redirect("/")
else:
return render(reqeust,{"form":form})
编辑书籍:
def edit(request,id):
edit_obj=Book.objects.get(pk=id)
if GET请求:
form=BookModelForm(instance=edit_obj)
return render(reqeust,{"form":form})
‘‘‘
渲染页面同添加页面
‘‘‘
else POST请求:
form=BookModelForm(request.POST,instance=edit_obj)
if form.is_valid():
form.save() # edit_obj.update(clean_data)
return redirect("/")
else:
return render(reqeust,{"form":form})
(1) model的知识点:
class UserInfo(AbstractUser):
tel=models.CharField(max_length=32)
gender=models.IntegerField(choices=((1,"男"),(2,"女")),default=1)
yuan=UserInfo.objects.get(pk=1)
yuan.get_gender_display()
(2) modelform使用
model.py:
class Book(models.Model):
nid=models.AutoField(primary_key=True)
title=models.CharField(max_length=32)
price=models.DecimalField(max_digits=8,decimal_places=2) # 999999.99
pub_date=models.DateTimeField() # "2012-12-12"
# comment_count=models.IntegerField(default=100)
# poll_count=models.IntegerField(default=100)
publish=models.ForeignKey(to="Publish",on_delete=models.CASCADE) # 级联删除
authors=models.ManyToManyField(to="Author")
def __str__(self):
return self.title
form.py:
# 构建modelform
class BookModelForm(forms.ModelForm):
class Meta:
model=Book
fields="__all__"
‘‘‘
BookModelForm等同于:
class BookForm(forms.Form):
title=forms.CharField(max_length=32)
price=forms.IntegerField()
pub_date=forms.DateField(widget=widgets.TextInput(attrs={"type":"date"}))
#publish=forms.ChoiceField(choices=[(1,"AAA"),(2,"BBB")])
publish=forms.ModelChoiceField(queryset=Publish.objects.all())
authors=forms.ModelMultipleChoiceField(queryset=Author.objects.all())
‘‘‘
逻辑:
添加书籍:
def add(reqeust):
if GET请求:
form=BookModelForm()
return render(reqeust,{"form":form})
‘‘‘
渲染页面
<form action="" method="post" novalidate>
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="title">{{ field.label }}</label>
{{ field }}
<span>{{ field.errors.0 }}</span>
</div>
{% endfor %}
<input type="submit" value="提交" class="btn btn-default pull-right">
</form>
‘‘‘
else POST请求:
form=BookModelForm(request.POST)
if form.is_valid():
form.save() # Book.objects.create(clean_data)
return redirect("/")
else:
return render(reqeust,{"form":form})
编辑书籍:
def edit(request,id):
edit_obj=Book.objects.get(pk=id)
if GET请求:
form=BookModelForm(instance=edit_obj)
return render(reqeust,{"form":form})
‘‘‘
渲染页面同添加页面
‘‘‘
else POST请求:
form=BookModelForm(request.POST,instance=edit_obj)
if form.is_valid():
form.save() # edit_obj.update(clean_data)
return redirect("/")
else:
return render(reqeust,{"form":form})
标签:usermod query rect add mail ice poll search choices
原文地址:https://www.cnblogs.com/pcent/p/10803394.html