forms组件
-forms是什么?
就是一个类,可以校验字段(前台传过来的字段)
-怎么用:
-校验字段功能:
-先写一个类,继承Form
from django.shortcuts import render, HttpResponse
from django import forms
# 写一个类,要校验那些字段,就是类的属性
class MyForm(forms.Form):
# 定义一个属性,可以用来校验字符串类型
# 限制最大长度是8,最小长度是3
name=forms.CharField(max_length=,min_length=)
pwd=forms.CharField(max_length=,min_length=,required=True)
# 校验是否是邮箱格式
email=forms.EmailField()
-使用:
#实例化产生对象,传入要校验的数据(字典)
myform=MyForm(request.POST)
# is_valid如果是true表示校验成功,反之,校验失败
if myform.is_valid():
# 校验通过的数据
print(myform.cleaned_data)
return HttpResponse('校验成功')
else:
print(myform.cleaned_data)
#校验失败的信息
print(myform.errors)
-注意:校验的字段,可以多,但是不能少
-渲染模板
-第一中方式:(灵活性最高)
<form action="" method="post" >
<p>用户名: {{ myform.name }}</p>
<p>密码: {{ myform.pwd }}</p>
<p>邮箱: {{ myform.email }}</p>
<input type="submit" value="提交">
</form>
-第二种方式:for循环form对象(用的比较多):
<form action="" method="post" >
{% for foo in myform %}
<p>{{ foo.label }}:{{ foo }}</p>
{% endfor %}
<input type="submit" value="提交">
</form>
-第三种方式(不建议用):
<form action="" method="post" > {# {{ myform.as_p }}#}
{{ myform.as_ul }}
<input type="submit" value="提交">
</form> -渲染错误信息
- myforms有errors
-属性(name)也有errors
-错误信息,变成中文:
- error_messages={'max_length': '最长是8', 'min_length': '最短是3', 'required': '这个必须填','invalid': '不符合邮箱格式'}
-给input标签指定样式,指定格式:
-widget=widgets.TextInput(attrs={'class':'form-control'})
-模板,渲染错误信息:<span>{{ myform.name.errors. }}</span>
-局部钩子校验
-定义一个函数,名字叫:clean_字段名字,内部,取出该字段,进行校验,如果通过,将该字段返回,如果失败,抛异常(ValidationError)
- def clean_name(self):
# self:当前form对象
name = self.cleaned_data.get('name')
if name.startswith('sb'):
# 失败,抛异常
raise ValidationError('不能以傻逼开头')
# 正常,把name返回
return name
-全局钩子
#重写clean方法
def clean(self):
#程序能走到该函数,前面校验已经通过了,所以可以从cleaned_data中取出密码和确认密码
pwd=self.cleaned_data.get('pwd')
re_pwd=self.cleaned_data.get('re_pwd')
#进行自己的校验
if pwd==re_pwd:
#通过,直接返回cleaned_data
return self.cleaned_data
else:
#失败,抛异常(ValidationError)
raise ValidationError('两次密码不一致'
---------------------------------views代码--------------------------------------------------
from django.shortcuts import render, HttpResponse,redirect from django.http import HttpRequest, JsonResponse # Create your views here.
# ---------------------//-----------------------
from django import forms
from django.core.exceptions import ValidationError
from django.forms import widgets
from app01 import models class MyForm(forms.Form):
name = forms.CharField(max_length=, min_length=, label='用户名', error_messages={
'max_length': '最长是8个字符',
'min_length': '最短是3个字符',
'required': '这个必须填'
},widget=widgets.TextInput(attrs={'class': 'form-control'}))
pwd = forms.CharField( max_length=, min_length=, required=True, label='密码',
error_messages={
'max_length': '最长是8个字符',
'min_length': '最短是3个字符',
'required': '这个必须填'
},widget=widgets.PasswordInput(attrs={'class': 'form-control'}))
re_pwd = forms.CharField( max_length=, min_length=, required=True, label='请再次输入密码',
error_messages={
'max_length': '最长是8个字符',
'min_length': '最短是3个字符',
'required': '这个必须填'
},widget=widgets.PasswordInput(attrs={'class': 'form-control'}))
email = forms.EmailField(label='邮箱', error_messages={
'required': '这个必须填',
'invalid': '不符合邮箱格式'
},widget=widgets.TextInput(attrs={'class': 'form-control'})) def clean_name(self):
name = self.cleaned_data.get('name') name_list = models.Book.objects.all()
for user_name in name_list: if user_name.name == name:
raise ValidationError('用户已存在') return name
def clean(self):
pwd = self.cleaned_data.get('pwd')
re_pwd = self.cleaned_data.get('re_pwd')
if pwd == re_pwd:
return self.cleaned_data
else:
raise ValidationError('两次密码输入不一致') def form(request):
if request.method == 'GET':
myform = MyForm()
print(request.GET)
return render(request,'form1.html',locals())
elif request.method == 'POST':
# print(request.POST)
# print(request.body) print('在这---------------------------------------')
# print(request.body)
user_info = json.loads(request.body.decode('utf-8'))
print(user_info)
myform = MyForm(user_info)
# myform = MyForm(request.POST)
# print(myform) # return HttpResponse()
# print(myform)
if myform.is_valid():
print('')
data = myform.cleaned_data
print(data)
return JsonResponse(,safe=False)
# return HttpResponse(data)
else:
# all_error = myform.errors.get('__all__')
# print('pppppp')
# print(myform.errors)
# print(all_error)
# if all_error:
# all_error = all_error[]
return JsonResponse(myform.errors)
--------------------------------前端代码------------------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/static/jquery-3.3.1.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div class="col-md-4 col-md-offset-4">
<form novalidate class="form-horizontal">
<div> {% for foo in myform %}
{# <p>{{ foo.label }} : {{ foo }} <span>{{ foo.errors.0 }}</span></p>#}
<p>{{ foo.label }} : {{ foo }} <span id="{{ foo.name }}_box" style="color: red"></span></p> {% endfor %}
{# <p>#}
{# <button id="btn" class="btn btn-primary">提交</button>#}
{# <span>{{ all_error }}</span>#}
{# </p>#}
</div>
</form>
<button id="btn" class="btn btn-primary">提交</button>
<span id="btn_box"></span>
</div>
</body>
<script>
$('#btn').click(function () { var user_info = {
'name': $('#id_name').val(),
'pwd': $('#id_pwd').val(),
're_pwd': $('#id_re_pwd').val(),
'email': $('#id_email').val()
};
var pos = JSON.stringify(user_info);
$.ajax({
url: '/form1/',
type: 'post',
contentType: 'application/json',
dataType: 'json',
data: pos,
success: function (data) {
console.log(data);
{#var span = '<span></span>';#}
if (data == 200) {
alert('注册成功')
} for (info in data) {
console.log('222');
if (info == 'name') {
$('#name_box').text(data[info]);
console.log('333') }
if (info == 'pwd') {
$('#pwd_box').text(data[info]);
console.log('333') }
if (info == 're_pwd') {
$('#re_pwd_box').text(data[info]);
console.log('333') }
if (info == 'email') {
$('#email_box').text(data[info]);
console.log('333') }
if (info == '__all__') {
$('#btn_box').text(data[info]);
console.log('333') } } } }) });
$('#id_name').blur(function () {
var user_name = {'name':$('#id_name').val()};
$.ajax({
url: '/form1/',
type: 'post',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify(user_name),
success: function (data) {
$('#name_box').text(data['name']); }
}) }) </script>
</html>

django_forms组件用ajax发送数据验证注册的更多相关文章

  1. Django进阶(路由系统、中间件、缓存、Cookie和Session、Ajax发送数据

    路由系统 1.每个路由规则对应一个view中的函数 url(r'^index/(\d*)', views.index), url(r'^manage/(?P<name>\w*)/(?P&l ...

  2. Django——Ajax发送请求验证用户名是否被注册

    场景: 用户注册的时候,输入用户名之后,Ajax发送请求到后端,后端验证该用户名是否已经被注册,然后返回到注册页面提示用户. 1.模型: from django.db import models cl ...

  3. jQuery——通过Ajax发送数据

    Ajax(Asynchronous JavaScript and XML,异步JavaScript和XML),一个Ajax解决方案涉及如下技术: JavaScript:处理与用户及其他浏览器相关事件的 ...

  4. 2-功能1:基于用户认证组件和Ajax实现登录验证(图片验证码)

    1.登录页面的设计 (1)label标签的id属性 label标签的id属性,点击label标记,相当于点击了input框 bootstarp样式 class="form-group&quo ...

  5. 前台Ajax发送数据给后台

    前台发ajax请求给后台 前台代码 let data= [{receiveAdd:receiveAddVal, sendAdd:sendAddVal,distance:distance,goodsNa ...

  6. 测试ajax发送数据时在控制台看不到请求信息

    都是因为我把alert(xmlhttp);alert(url);打印测试数据放到了xmlhttp.open("GET",url,true);之前,导致后面的发送请求不执行了!

  7. 在.net MVC项目中使用ajax进行数据验证

    1.首先要在网页引入应该引入的js文件 在这里回顾一下在模板页里面挖坑的技术 2.在html中使用html辅助方法 3.验证模型 4验证方法

  8. Ajax发送数据

  9. Ajax发送POST请求对数据的封装

    Ajax发送POST请求把数据到后端后,后端收到数据并解析出来 示列一: Ajax发送请求,这里主要是发送一个数组的数据类型到后端,如果没有先把数组进行格式化成字符串的话,后端就收了就是一个字符串类型 ...

随机推荐

  1. C++语言基础(20)-模板的非类型参数

    一.在函数模板中使用非类型参数 #include <iostream> using namespace std; template<class T> void Swap(T & ...

  2. 0049 MyBatis关联映射--一对一关系

    世上的事务总不是孤立存在的,表现在Java类里面,则是类与类之间的关系,比如继承is-a.依赖use-a.关联has-a,反映在数据库中,则是表与表之间的关系,比如外键 关联关系存在着以下几种类型:一 ...

  3. struts-config message-resources配置问题总结

    问题:我的app无法读取配置好的ApplicationResources.properties中的内容 解答:文件目录为 /webapp /WEB-INF /classes ApplicationRe ...

  4. plsql 查询到别的用户下面的表

    原因:勾选了"Allow multiple connections" 解决方法:打开"Tools"下面的"Perference",里面有个& ...

  5. github 修改项目默认语言

    我们在提交到github上的项目有时候被识别成了其它的语言,非我们使用的语言,这个时候可以采取以下措施来强制将语言改成我们需要的语言 在项目中创建一个文件 .gitattributes 打开.gita ...

  6. golang json数组拼接

    2016年06月16日 15:38:25 阅读数:2575 标签: golangjson数组 更多 个人分类: golang   func main() { a := []byte(`{"P ...

  7. windows静态库的使用

    最近在学Zeromq(像框架一样的一个socket library)的使用,里面有关于库的使用问题.今天就来复习下静态库的使用: 使用静态库是重用代码的一种绝佳方式.您不必在自己创建的每个程序中重新实 ...

  8. ifconfig配置网络时,出现“SIOCSIFADDR: No such device”

    最近刚学习linux,参考教学视频,试着使用ifconfig命令来设置网卡参数,命令为“ifconfig eth0 192.168.11.2”. 但结果显示“SIOCSIFADDR: No such ...

  9. 使用Using的注意事项

    参数传递 C#中有四种参数类型:值类型,Ref参数,Out参数,params参数.默认参数都是以传值方式传递,这意味着方法中的变量会在内存中被分配新的存储空间,并赋值.对于引用类型,这种传值意味着传递 ...

  10. abp项目如何按业务功能模块横向分割?

    1.为什么要做分层? 请先看项目分层的最后结构: 2.设计的初衷 项目较大,且主题鲜明,分为:BI模块.DM-用户洞察模块.Manage-应用管理模块.Report应用分析报表模块,大模块之间并无依赖 ...