django form插件简单使用,判断用户名是否存在、用户输入是否合法,HTML input自动生成

首先HTML效果图:

django form插件简单使用,判断用户名是否存在、用户输入是否合法,HTML input自动生成

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册内容验证</title>
</head>
<body>
    <form action="/register/" method="post" novalidate>
        <p>username:{{ obj.username }}{{ obj.errors.username.0 }}</p>
        <p>password:{{ obj.password }}{{ obj.errors.password.0 }}</p>
        <p>age:{{ obj.age }}{{ obj.errors.age.0 }}</p>
        <p>email:{{ obj.email }}{{ obj.errors.email.0 }}</p>
        <p>address:{{ obj.address }}{{ obj.errors.address.0 }}</p>
        <p>{{ obj.gender }}</p>
        <p>{{ obj.users }}</p>
        <p>{{ obj.myaddrs }}</p>
        <p><input type="submit" value="提交"><input type="reset" value="重置"> </p>
    </form>
</body>
</html>

 

后台Veiws代码:

from django.shortcuts import render,redirect
from django import forms
from django.forms import widgets
# Create your views here.
#创建Form验证类,继承forms.Form
class RegisterForm(forms.Form):
    username = forms.CharField(max_length=32,min_length=12,required=True,error_messages={
        "max_length":"长度必须为6~12",
        "min_length":"长度必须为6~12",
        "required":"用户名不能为空",
    })
    password = forms.CharField(required=True,error_messages={
        "required":"密码不能为空!"
    })
    age = forms.IntegerField(required=True,error_messages={
        "required": "密码不能为空!",
        "invalid":"年龄必须为数字!"
    })
    email = forms.EmailField(required=True,error_messages={
        "required": "邮箱不能为空!",
        "invalid": "邮箱格式不正确!"
    })
    address = forms.CharField(
        initial=2,
        widget = widgets.Select(choices=((1,"北京"),(2,"上海"),(3,"深圳"),))

    )

    gender = forms.ChoiceField(
        choices=((0,"男"),(1,"女")),
        widget=widgets.RadioSelect,
        initial=0
    )

    #多选select,值为列表
    users = forms.MultipleChoiceField(
        choices=((1,'上海'),(2,'北京'),(3,"深圳")),
        initial=[2,],
        #可以加属性
        widget=widgets.SelectMultiple(attrs={"class":"ray"})
    )

    myaddrs = forms.MultipleChoiceField(
        choices=((1, '上海'), (2, '北京'), (3, "深圳")),
        initial=3,
        widget=widgets.CheckboxSelectMultiple
    )


def register(request):
    if request.method=="GET":
        obj = RegisterForm()
        return render(request,"registervalid.html",{"obj":obj})
    else:
        #将表单值获取到 传入Form参数
        obj = RegisterForm(request.POST)
        if obj.is_valid():
            print("验证成功!",obj.cleaned_data)
            return redirect("Http://www.baidu.com")
        else:
            print("验证失败!",obj.errors)
            return render(request,"registervalid.html",{"obj":obj})

如果要加一些额外功能,比如判断用户名是否存在,input为password格式等:

from django.shortcuts import render,redirect,HttpResponse
from django import forms
from django.forms import widgets
from app1 import models
import json

class AjaxForm(forms.Form):
    username = forms.CharField(
        #如果要设置密码字段
        # widget=widgets.PasswordInput,
        required=True,
        min_length=3,
        error_messages={
            "min_length":"用户名输入不正确",
        },

    )
    gender = forms.BooleanField(
        widget=widgets.RadioSelect(choices=[(0,"男"),(1,"女"),]),
        required=False
    )
    # birthday = forms.DateTimeField(
    #     widget=widgets.DateInput(attrs={"type":"date"})
    # )


# Create your views here.
def ajaxForm(request):
    if request.method=="GET":
        user = AjaxForm()
        print("heheh ")
        return render(request,"AjaxForm.html",{"user":user})
    else:
        ret = {"status": "NG", "msg": None}
        af = AjaxForm(request.POST)
        #判断用户名是否已经存在
        is_exist = False
        print(af.data.get("username"),"asdfasd")
        if models.User.objects.filter(username=af.data.get("username")).count():
            is_exist = True
        else:
            is_exist = False
        if af.is_valid() and not is_exist :
            print(af.cleaned_data)
            models.User.objects.create(**af.cleaned_data)


            ret["status"]="OK"
            return HttpResponse(json.dumps(ret))
        else:
            print("NG")
            if is_exist:
                af.errors["username"]="用户名已存在!"
            ret["msg"] = af.errors
            return HttpResponse(json.dumps(ret))