from django.shortcuts import render, HttpResponse
import json
from app01 import models
# Create your views here.
def test(request):
if request.method == "POST":
name = request.POST.get("name")
sb = request.POST.getlist("sb")
print(name)
print(sb, type(sb))
# ret = {
# "status": 0,
# "data": [
# {"name": "aaa", "age": 18},
# {"name": "bbb", "age": 28},
# ]
# }
ret = {
"status": 1,
"error": "用户名已被注册!"
}
ret_str = json.dumps(ret)
return HttpResponse(ret_str)
return render(request, "test.html")
def check_user(request):
if request.method == "POST":
name = request.POST.get("name")
# 去数据库中查询用户名是否已经被注册
ret = models.UserInfo.objects.filter(name=name)
if ret:
# 用户名已经存在
msg = "用户名已被注册!"
else:
msg = "用户名可用"
return HttpResponse(msg)
def reg(request):
error = {"pwd": "", "user": ""}
if request.method == "POST":
name = request.POST.get("username")
pwd = request.POST.get("pwd")
if len(pwd) < 6:
error["pwd"] = "密码不能小于6位"
return render(request, "reg.html", {"error": error})
# Django Form组件的使用
from django import forms
from django.forms import widgets
from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError
class RegForm(forms.Form):
name = forms.CharField(
# 校验规则相关
max_length=16,
label="用户名",
error_messages={
"required": "该字段不能为空",
},
# widget控制的是生成html代码相关的
widget=widgets.TextInput(attrs={"class": "form-control"})
)
pwd = forms.CharField(
label="密码",
min_length=6,
max_length=10,
widget=widgets.PasswordInput(attrs={"class": "form-control"}, render_value=True), #密码不会被清除
error_messages={
"min_length": "密码不能少于6位!",
"max_length": "密码最长10位!",
"required": "该字段不能为空",
}
)
re_pwd = forms.CharField(
label="确认密码",
min_length=6,
max_length=10,
widget=widgets.PasswordInput(attrs={"class": "form-control"}, render_value=True),
error_messages={
"min_length": "密码不能少于6位!",
"max_length": "密码最长10位!",
"required": "该字段不能为空",
}
)
email = forms.EmailField(
label="邮箱",
widget=widgets.EmailInput(attrs={"class": "form-control"}),
error_messages={
"required": "该字段不能为空",
}
)
mobile = forms.CharField(
label="手机",
# 自己定制校验规则
validators=[
RegexValidator(r'^[0-9]+$', '手机号必须是数字'),
RegexValidator(r'^1[3-9][0-9]{9}$', '手机格式有误')
],
widget=widgets.TextInput(attrs={"class": "form-control"}),
error_messages={
"required": "该字段不能为空",
}
)
city = forms.ChoiceField(
choices=models.City.objects.all().values_list("id", "name"),
label="城市",
initial=1,
widget=forms.widgets.Select
)
# 重写父类的init方法 动态展示城市
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["city"].widget.choices = models.City.objects.all().values_list("id", "name")
def clean_name(self):
value = self.cleaned_data.get("name")
if "xxx" in value:
raise ValidationError("不符合社会主义核心价值观!")
return value
# 重写父类的clean方法
def clean(self):
# 此时 通过检验的字段的数据都保存在 self.cleaned_data
pwd = self.cleaned_data.get("pwd")
re_pwd = self.cleaned_data.get("re_pwd")
if pwd != re_pwd:
self.add_error("re_pwd", ValidationError("两次密码不一致"))
raise ValidationError("两次密码不一致")
return self.cleaned_data
# gender = forms.ChoiceField(
# choices=((1, "男"), (2, "女"), (3, "保密")),
# label="性别",
# initial=1,
# widget=forms.widgets.RadioSelect
# )
# hobby = forms.ChoiceField(
# choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
# label="爱好",
# initial=3,
# widget=forms.widgets.Select
# )
# hobby2 = forms.MultipleChoiceField(
# choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
# label="爱好",
# initial=[1, 3],
# widget=forms.widgets.SelectMultiple()
# )
#
# keep = forms.ChoiceField(
# label="是否记住密码",
# initial="checked",
# widget=forms.widgets.CheckboxInput
# )
# hobby3 = forms.MultipleChoiceField(
# choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
# label="爱好",
# initial=[1, 3],
#
# widget=forms.widgets.CheckboxSelectMultiple(attrs={"class": "c1"})
# )
def reg2(request):
form_obj = RegForm()
if request.method == "POST":
form_obj = RegForm(request.POST)
# 让form帮我们做校验
if form_obj.is_valid():
# 校验通过
# 把数据存到数据库
# 所有经过校验的数据都保存在 form_obj.cleaned_data
print(form_obj.cleaned_data)
del form_obj.cleaned_data["re_pwd"]
models.UserInfo.objects.create(**form_obj.cleaned_data)
return HttpResponse("注册成功!")
print(form_obj.errors["__all__"][0])
print(form_obj.errors["re_pwd"])
return render(request, "reg2.html", {"form_obj": form_obj})