本篇内容接上篇Python基础(Django)
六、Form
说明:Django中的From有两种功能,一是将自己显示成HTML,二是校验数据。
个人认为显示成HTML这个功能不太方便,因为显示样式不太好调整,建议只使用Form的校验数据的功能,所以这里对于样式的设置不做介绍,着重介绍校验数据的功能。
Form的使用大概分为三个步骤:
首先定义一个类:类中的每一个字段都是Form的一个属性
然后根据类创建对象并定义校验方法:将创建的对象返回给前端的HTML页面引用,可生成相应的HTML代码。(同时通过调用类的方法可以校验和获取前端用户提交的数据。)
最后在HTML中引用:如果HTML中的标签和样式是自定义的,那么标签的name属性的值必须和Form中的字段名称一致,否则后台将无法获取和进行数据检验。
举例:
1、定义一个类:
文件名:account.py
from django import forms #导入forms类 class Userinfo(forms.Form): #新创建的类必须继承forms.Form email = forms.EmailField(required=False) #默认是不允许为空,如果加上required=False参数则表示允许为空 username = forms.CharField() #forms有多种字段类型,每种代表不同的校验规则 password = forms.CharField()
2、根据类创建对象并定义校验方法
文件名:views.py
from django.shortcuts import render,HttpResponseRedirect from app01 import account as AccountForm #导入事先定义的类文件 def login(req): #定义校验方法 obj = AccountForm.Userinfo(req.POST) #获取用户提交的数据 if req.method == ‘POST‘: #如果用户的请求类型是POST error = ‘‘ if obj.is_valid(): #校验用户提交的数据是否合法 all_data = obj.clean() #获取用户提交的数据内容(字典形式) if all_data[‘username‘] == ‘test‘ and all_data[‘password‘] == ‘123‘: return HttpResponseRedirect(‘/index/‘) #验证通过则跳转到URL:/index/ else: error = obj.errors #若数据不合法则获取错误信息 return render(req,‘account/login.html‘,{‘error‘:error}) #在页面上显示数据校验失败后的提示信息。 # return render(req,‘account/login.html‘,{‘obj‘:obj}) #这种方式表示把创建的对象返回给前端的HTML页面引用,可生成相应的HTML代码。 return render(req,‘account/login.html‘) #这种方式表示自定义页面标签及样式,而不使用后台返回的对象来生成HTML代码。
3、在HTML中引用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <div style="margin: 20px"> <form action="/login/" method="post"> <p> <input type="text" class="span3" name="username" placeholder="Username"> <!--自定义的标签 name属性和Form的字段名称一致--> <span>{{ error.username }}</span> <!--数据校验失败的错误信息提示,若无错误则无显示--> </p> <p> <input type="password" class="span3" name="password" placeholder="Password"> <span>{{ error.password }}</span> </p> <p> <input type="text" class="span3" name="email" placeholder="Email"> <span>{{ error.email }}</span> </p> <input type="submit" value="submit"> </form> </div> </body> </html>
七、Model(待续)
时间: 2024-10-09 23:21:50