django form表单验证入门

        当我们在使用Django Form的时候 ,    Django默认的Required,max_length,min_length等只提供了基本需求,但满足不了其它验证需求: 比如说注册的时候 密码和确认密码是否相同,登陆时用户名和密码是否正确等等

      下面给出了一个简单的登录验证功能:

from django.shortcuts import render
from django.http import HttpResponse
from django.core.exceptions import ValidationError
from django import forms
from Default.models import Users

# Create your views here


#Define Login form 
class sign_in_form(forms.Form):
	email=forms.EmailField(required=True,error_messages={'required':u'邮箱不能为空','invalid':u'请输入正确的邮箱'})
	password=forms.CharField(required=True,error_messages={'required':u'密码不能为空','invalid':u'请输入正确的邮箱'})
	remember=forms.BooleanField()

	#验证模块
	def clean(self):
		#获取表单数据
		cleaned_data=self.cleaned_data

		#最好使用cleaned_data.get("email")替代cleaned_data["email"]  这样当传入空值 就不会报错
		data_email=cleaned_data.get("email")
		data_password=cleaned_data.get("password")
		if data_email:
			is_exist=Users.objects.filter(email=data_email,password=data_password).exists()
			if not is_exist:
				self._errors['password'] = self.error_class([u"用户名或密码错误!"])

		#无论做了什么验证 data始终要传回去,否则就失去form data了
		return cleaned_data

登录方法体:

def login(req):
	if req.method == 'POST':
		form=sign_in_form(req.POST)
		print(form)
		if form.is_valid():
			return index(req)
		else:
			return render(req,'signin.html',{'form':form})
	else:
		return render(req, 'signin.html')

前端Html代码:

            <div class="box">
                <form method="post" id="form">
                    <div class="content-wrap">
                        <h6>Sign Up</h6>                  
                        <input class="span12" name="email" type="text" value="{{form.email.value}}" placeholder="E-mail address" />
                        <input class="span12" name="password1" type="password" placeholder="Password" />
                        <input class="span12" name="password2" type="password" placeholder="Confirm Password"/>
                        <div id="error_div">
                        <!--遍历传回表单数据中,将其中的错误信息显示出来-->
                        {%for field in form%}
                            {{field.errors}}
                        {%endfor%}
                        </div> 
                        <div class="action">
                            <input type="submit" class="btn-glow primary signup" value="Sign up"></input>
                        </div>        
                    </div>
                </form>
            </div>


转载于:https://my.oschina.net/waston/blog/551604

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值