python django表单及其表单验证
来源:互联网 发布:淘宝联盟购物车没了 编辑:程序博客网 时间:2024/04/30 08:08
##### 在写django的时候之前一直没有理解django表单所带来的便利,好不容易明白了,就想写点自己的笔记,记录总结一下django表单的用法。
首先看看views.py中的代码
from django import formsfrom django.forms import fieldsfrom django.forms import widgets#生成一个form表单的类,字段为我们要填写的字段,#error_messsages为字段验证不通过时的报错#widgets可以为所要填写字段的类型,以及添加html的属性class UserForm(forms.Form): username = fields.CharField(required=True, error_messages={'required':"用户名不为空"}, widget=widgets.TextInput(attrs={'class':'form-control'})) password = fields.CharField(required=True, error_messages={'required': "密码不为空"}, widget=widgets.TextInput(attrs={'class': 'form-control'})) email = fields.EmailField(required=True, error_messages={'required': "邮箱不为空","invalid":"邮箱格式错误"}, widget=widgets.EmailInput(attrs={'class': 'form-control'})) ut_id =fields.IntegerField(required=True, widget=widgets.Select(attrs={'class':'form-control'}, choices=models.UserType.objects.values_list('id','name'))) #这里根据UserType已经添加的类型进行选择用户类型 #这里执行了构造方法是,如果我们添加了新的用户类型的话,除非重启服务,否则不会加载新的数据,所以要添加一个构造方法 #来进行重新加载 def __init__(self,*args,**kwargs): super(UserForm,self).__init__(*args,**kwargs) self.fields['ut_id'].widget.choices = models.UserType.objects.values_list('id','name')#判断request.method的方法,是则创建实例,obj,然后传给模板进行渲染#如果是别的请求则接受POST请求的数据,传给UserForm类,然后执行实例的方法is_valid()来判断符合,#我们之前要求的数据格式不,验证通过的数据直接传给models来进行创建def add_user(request): if request.method == "GET": obj = UserForm() return render(request,'add_user.html',{'obj':obj}) else: obj =UserForm(request.POST) if obj.is_valid(): print ("pass",obj.cleaned_data) models.UserInfo.objects.create(**obj.cleaned_data) return redirect('/users2') else: pass return render(request, 'add_user.html',{'obj':obj})#这里是编辑的视图,先进行表单的初始化initial来进行初始化def edit_user(request,uid): if request.method == "GET": user = models.UserInfo.objects.filter(id=uid).first() obj = UserForm(initial={'username':user.username,'password':user.password,'email':user.email,'ut_id':user.ut_id}) return render(request,'edit_user.html',{'uid':uid,'obj':obj}) else: obj = UserForm(data = request.POST) if obj.is_valid(): models.UserInfo.objects.filter(id=uid).update(**obj.cleaned_data)#使用update方法来进行更新 return redirect('/users2') return render(request,'edit_user.html',{'uid':uid,'obj':obj})
下面是模板的代码,创建用户的表单
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css"/></head><body> <div style="width: 600px;margin: 0 auto;"> <form method="POST" action="/add-user"> {% csrf_token %} <div class="form-group"> <label>用户名</label> {{obj.username}} #这里传来的表单对象 <span>{{ obj.errors.username.0 }}</span> #这里是报错的信息 </div> <div class="form-group"> <label >密码</label> {{obj.password}} <span>{{ obj.errors.password.0 }}</span> </div> <div class="form-group"> <label >邮箱</label> {{obj.email}} <span>{{ obj.errors.email.0 }}</span> </div> <div class="form-group"> <label >用户类型</label> {{obj.ut_id}} <span>{{ obj.errors.ut_id.0 }}</span> </div> <button type="submit" class="btn btn-default">提交</button> </form> </div></body></html>
下面这个是编辑用户的表单
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css"/></head><body> <div style="width: 600px;margin: 0 auto;"> <form method="POST" action="/edit-user-{{uid}}"> #这里会获取UID的信息,urls.py中是这样 {% csrf_token %} # url(r'^edit-user-(\d+)$', views.edit_user), <div class="form-group"> <label>用户名</label> #其他的同创建表单一样 {{obj.username}} <span>{{ obj.errors.username.0 }}</span> </div> <div class="form-group"> <label >密码</label> {{obj.password}} <span>{{ obj.errors.password.0 }}</span> </div> <div class="form-group"> <label >邮箱</label> {{obj.email}} <span>{{ obj.errors.email.0 }}</span> </div> <div class="form-group"> <label >用户类型</label> {{obj.ut_id}} <span>{{ obj.errors.ut_id.0 }}</span> </div> <button type="submit" class="btn btn-default">提交</button> </form> </div></body></html>
最后对于上传文件的总结
def test(request): if request.method == "GET": obj = TestForm() return render(request,"test.html",{'obj':obj}) else: # obj = TestForm(request.POST,files=request.FILES) # if obj.is_valid(): #老式的上传文件,先写入内存,然后写 # file_obj = obj.cleaned_data['n5'] #写到指定的目录 # file_obj.name # f = open(file_obj.name,'wb') # for chunk in file_obj.chunks(): # f.write(chunk) # f.close() # else: # pass import os file_obj = request.FILES.get('n5') #这里是新的方法 f = open(os.path.join('static',file_obj.name), 'wb') for chunk in file_obj.chunks(): f.write(chunk) f.close() return redirect('/test')class TestForm(forms.Form): #表单 n5 = fields.FileField()
阅读全文
0 0
- python django表单及其表单验证
- django中与表单相关的字段及其验证器
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- python django 表单
- jQuery提交表单数据及其表单验证
- Django表单和域的验证
- django表单处理(二)--数据验证
- 实验一 线性表的基本操作实现及其应用
- 整理docker及Hadoop脚本(二)
- java中非静态内部类可以有常量但不能有staic修饰的属性
- Linux(CentOS 7_x64位)系统下安装RDkit
- 互联网 30周年纪念日
- python django表单及其表单验证
- 绿盟网络科技面试经验
- 常用Linux命令
- C++复习第四天 引用不简单(本质是指针)
- 数据库中等值连接与自然连接的区别
- CentOS7安装MySQL5.7
- PHP实现验证码功能
- jenkins的安装与配置
- Android开发规范