Django组件—forms组件

forms组件:

  校验字段功能:

  针对一个实例:注册用户。

  模型:models.py

class UserInfo(models.Model):
    name=models.CharField(max_length=32)
    pwd=models.CharField(max_length=32)
    email=models.EmailField()
    tel=models.CharField(max_length=32)

  模板:register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>

<form action="" method="post">
    {% csrf_token %}
    <div>
        <label for="user">用户名</label>
        <p><input type="text" name="name" id="name"></p>
    </div>
    <div>
        <label for="pwd">密码</label>
        <p><input type="password" name="pwd" id="pwd"></p>
    </div>
    <div>
        <label for="r_pwd">确认密码</label>
        <p><input type="password" name="r_pwd" id="r_pwd"></p>
    </div>
     <div>
        <label for="email">邮箱</label>
        <p><input type="text" name="email" id="email"></p>
    </div>
    <input type="submit">
</form>

</body>
</html>

  视图函数:register

# forms组件
from django.forms import widgets

wid_01=widgets.TextInput(attrs={"class":"form-control"})
wid_02=widgets.PasswordInput(attrs={"class":"form-control"})

class UserForm(forms.Form):
    name=forms.CharField(max_length=32,
                         widget=wid_01
                         )
    pwd=forms.CharField(max_length=32,widget=wid_02)
    r_pwd=forms.CharField(max_length=32,widget=wid_02)
    email=forms.EmailField(widget=wid_01)
    tel=forms.CharField(max_length=32,widget=wid_01)

def register(request):

    if request.method=="POST":
        form=UserForm(request.POST)
        if form.is_valid():
            print(form.cleaned_data)       # 所有干净的字段以及对应的值
        else:
            print(form.cleaned_data)       #
            print(form.errors)             # ErrorDict : {"校验错误的字段":["错误信息",]}
            print(form.errors.get("name")) # ErrorList ["错误信息",]
        return HttpResponse("OK")
    form=UserForm()
    return render(request,"register.html",locals())

渲染标签功能:

  渲染方式1:

<h3>渲染方式一</h3>
<form action="" method="post" novalidate>
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit">
</form>
</body>
</html>

  直接将form对象传入,然后通过.as_p方法可以将每一个字段都以input标签建成。

  input标签前的名字,默认是字段名,若想显示为中文,则需要在字段属性中,添加lable.如:

class UserForm(forms.Form):
    name = forms.CharField(min_length=4,label="姓名")
    pwd = forms.CharField(max_length=16,label="密码")
    age = forms.IntegerField(label="年龄")
    tel = forms.CharField(label="电话")

  渲染方式2:

<h3>渲染方式二</h3>
<form action="" method="post" novalidate>
    {% csrf_token %}
    <div>
        <label for="">用户名</label>
        {{ form.name }}
{#        一定要是form.字段名#}
    </div>
    <div>
        <label for="">密码</label>
        {{ form.pwd }}
    </div>
    <div>
        <label for="">年龄</label>
        {{ form.age }}
    </div>
    <div>
        <label for="">电话</label>
        {{ form.tel }}
    </div>
    <input type="submit">
</form>

  

  渲染方式三:form表单外是加了一些bootstrap样式

<div class="container">
    <div class="row">
        <div class="col-md-8">
            <form action="" method="post" novalidate>
                {% csrf_token %}
                {% for field in form %}
                    <div class="form-group">
                        <label for="">{{ field.label }}</label>
                        {{ field }}
                    </div>
                {% endfor %}
                <input type="submit">
            </form>
        </div>
    </div>
</div>

  显示错误与重置输入信息功能:

  视图:

from django.shortcuts import render,HttpResponse,reverse,redirect

# Create your views here.

from app01.form import UserForm
def register(request):
    if request.method == "POST":
        form = UserForm(request.POST)
        if form.is_valid():
            print("######success#######")
            print(form.cleaned_data)
            print(form.errors)
            print(type(form.errors))
            return HttpResponse("添加成功")
        else:
            print("##########failed##########")
            print(form.cleaned_data)    # 正确的情况下会显示的字典。
            print(form.errors)   # 是一个字典。
            print(form.errors.get("name"))  # 拿到的是ul里面包着错误信息
            print(form.errors.get("name")[0])  # 拿到的是错误信息
            return render(request,"register.html",locals())
    form = UserForm()
    return render(request,"register.html",locals())

  模板:

<div class="container">
    <div class="row">
        <div class="col-md-8 col-lg-offset-2">
            <form action="" method="post" novalidate>
                {% csrf_token %}
                {% for field in form %}
                    <div class="form-group">
                        <label for="">{{ field.label }}</label>
                        {{ field }} <span class="errors pull-left">{{ field.errors.0 }}</span>
                    </div>
                {% endfor %}
                <div class="form-group">
                    <input type="submit" class=" btn btn-success btn-sm">
                </div>
            </form>
        </div>
    </div>
</div>

局部钩子与全局钩子:

  模板:

from django import forms
from django.core.exceptions import ValidationError,NON_FIELD_ERRORS
from django.forms import widgets  # widgets可以设置css样式

class UserForm(forms.Form):
    name = forms.CharField(min_length=4,label="姓名",widget=widgets.TextInput(attrs=({"class":"form-control"})))
    pwd = forms.CharField(max_length=16,label="密码",widget=widgets.PasswordInput(attrs=({"class":"form-control"})))
    age = forms.IntegerField(label="年龄",widget=widgets.TextInput(attrs=({"class":"form-control"})))
    tel = forms.CharField(label="电话",widget=widgets.TextInput(attrs=({"class":"form-control"})))

    def clean_name(self):  # 函数名格式必须是 clean_字段名。源码规定。
        val = self.cleaned_data.get("name")   # 从正确字典中获取name数据。
        if not val.isdigit():       # 如果不是纯数字。
            return val              # 返回源数据。
        else:
            raise ValidationError(‘用户名不能是纯数字‘)      # 否则就抛出错误。

    def clean_pwd(self):
        val = self.cleaned_data.get("pwd")
        if len(val)>6:
            return val
        else:
            raise ValidationError("密码不足6位")

    def clean_age(self):
        val = self.cleaned_data.get("age")
        if int(val)>=18:
            return val
        else:
            raise ValidationError(‘未成年不得入内‘)

    def clean_tel(self):
        val = self.cleaned_data.get("tel")
        if int(val)==11:
            return val
        else:
            raise ValidationError("手机号不合法")

  视图:

<div class="container">
    <div class="row">
        <div class="col-md-8 col-lg-offset-2">
            <form action="" method="post" novalidate>
                {% csrf_token %}
                {% for field in form %}
                    <div class="form-group">
                        <label for="">{{ field.label }}</label>
                        {{ field }} <span class="errors pull-left">{{ field.errors.0 }}</span>
                    </div>
                {% endfor %}
                <div class="form-group">
                    <input type="submit" class=" btn btn-success btn-sm">
                </div>
            </form>
        </div>
    </div>
</div>

原文地址:https://www.cnblogs.com/stfei/p/9275724.html

时间: 2024-10-08 23:52:01

Django组件—forms组件的相关文章

django第13天(auth组件,forms组件)

django第13天(auth组件,forms组件) auth组件 -auth组件 -auth是什么? -django内置的用户认证系统,可以快速的实现,登录,注销,修改密码.... -怎么用? -(1)先创建超级用户: -python3 manage.py createsuperuser -输入用户名,邮箱(可以不输入),密码,敲回车,这样就创建出一个超级用户 -也就是在auth_user这个表中插入了一条数据(密码是加密的,所以我不能手动插入) -(2)验证用户: -from django.

CSIC_716_20200113【Django入门---forms组件、session和cookie、登录认证装饰器】

forms组件 forms组件的功能:1.渲染前端页面,不用在前端手写forms表单了,不过只会渲染用户输入(输入.选择.下拉.文件)的标签,不渲染按钮以及form表单标签,.2.后端能进行非常规范的数据合法性校验3.展示校验之后的合法性信息. 使用方法:1.定义一个自定义forms类 form组件的前端渲染方式 效果差不多 哈哈哈哈 顶 原文地址:https://www.cnblogs.com/csic716/p/12189236.html

12.Django组件-forms组件

forms组件 校验字段功能 针对一个实例:注册用户讲解. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) pwd=models.CharField(max_length=32) email=models.EmailField() tel=models.CharField(max_length=32) 模板: register.html: <!DOCTYPE html> <ht

Django组件——forms组件

一,forms组件: 校验字段功能针对一个实例:注册用户讲解.模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) pwd=models.CharField(max_length=32) email=models.EmailField() tel=models.CharField(max_length=32) 模板: register.html: <!DOCTYPE html> <h

Django组件:forms组件

针对"注册用户"示例: 一.校验字段功能 1.模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) pwd=models.CharField(max_length=32) email=models.EmailField() tel=models.CharField(max_length=32) 2.模板:register.html: <!DOCTYPE html> &l

Django - 基于forms组件和Ajax实现注册登录 - FileField字段 - Media配置

一.基于forms组件的注册页面设计 点击头像==点击input 头像预览: 修改  获取用户选中的文件对象:获取文件对象的路径:修改img标签的src属性,让src=文件对象路径. register.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link

Django之forms组件使用

注册功能 1.渲染前端标签获取用户输入 >>> 渲染标签 2.获取用户输入传递到后端校验 >>> 校验数据 3.校验未通过展示错误信息 >>> 展示信息 校验数据(前后端都可以校验) 校验前端后端都可以做,但是前端可以不做,后端必须得做!!! django form组件 1.渲染标签 2.校验数据 3.展示信息 校验数据 第一步需要在views中写一个form类 from django import forms class MyForm(forms.F

django(forms组件、cookies与session)

一.forms组件 1.功能 - 渲染页面 - 校验数据 - 展示信息 需要先写一个类,该类类似于models中的表类 from django import forms class MyRegForm(forms.Form): # 用户名最少3位最多8位 username = forms.CharField(max_length=8,min_length=3) password = forms.CharField(max_length=8,min_length=3) # email字段必须填写符

Django之forms组件

一.校验数据功能 我们在写注册页面时,之前只是提交了数据,然后就保存了数据,后端根本就没有对数据进行校验,比如价格写的不是纯数字也让保存,这肯定是不行的,在前端是可以校验的,但我们不能只依靠前端验证,万一前端不校验,那整个过程就没校验了,所以,不管前端有没有校验,我们后端都应该进行验证. 现在注册页面要向我提交三个数据,用户名.密码.邮箱,当它提交过来后,首先我要对数据进行校验,根据数据的校验结果然后再决定保存还是给前端返回错误信息. views.py from django import fo