zoukankan      html  css  js  c++  java
  • form组件

    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})
  • 相关阅读:
    2020 CCF CSP-J2(表达式)
    PSP总结报告
    第十三周例行报告
    对团队成员公开感谢博客
    作业要求 20181127-1 附加作业 软件工程原则的应用实例分析
    第十二周例行报告
    第十一周例行报告
    第十周例行报告
    第八周例行报告
    第七周例行报告
  • 原文地址:https://www.cnblogs.com/chvv/p/10038048.html
Copyright © 2011-2022 走看看