广州番禺Python, Java小班周末班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6
8.2.1 django表单
在8.1节的内容中,我们直接使用了HTML来编写表单。在实际的开发过程中,处理表单是一件较为繁琐的工作,需要将不同类型的输入布局在一张表单中进行显示,然后提交到服务器中进行验证和处理。django内置的表单系统可以简化和自动化上述工作的大部分内容,并且会自动对用户的输入进行验证和清理,以帮助后端程序员编写更安全的代码。django中的表单系统主要做了以下三个方面的工作:
(1) 对数据进行重组,以便进行表单渲染
(2) 为用户的输入创建HTML表单
(3) 接收并处理用户的输入
8.2.2 django中的Form类
django表单系统的核心组件是Form类,在项目中使用Form类,需要从django.forms中进行导出:
from django.forms import Form
在django中使用Form类构建表单,类似于django模型的定义:
(1) 从Form中派生一个子类
(2) 在子类中定义相关的字段类型,字段类型对应于HTML form中的输入标签
使用Form类来快速构建form表单:
from django import forms class RegisterForm(forms.Form): account = forms.CharField(max_length=20,label="输入您的账号") password1 = forms.CharField(max_length=20, widget=forms.PasswordInput,label="输入账号密码") password2 = forms.CharField(max_length=20, widget=forms.PasswordInput,label="再次输入密码")
在上文代码中,字段类型中的max_length用来定义输入的最大长度,label用来定义提示标签,widget用来定义表单输入的类型。CharField的默认输入类型为TextInput,表示文本输入框,赋值为PasswordInput时,表示密码输入框。Form类中的字段名作为表单中的name参数。使用
Form类派生出一个子类以后,在视图中可以通过用户的请求参数来构造一个Form对象: from django.http import HttpResponse from django.shortcuts import render from .forms import RegisterForm def register(request): if request.method == 'POST': # 用户提交的输入保存在HttpRequest对象的POST属性中 form = RegisterForm(request.POST) elif request.method == 'GET': # 请求方法为GET时,构造一个空的表单对象,传递给模板进行渲染 form = RegisterForm() return render(request, "register.html", {"register_form": form})
RegisterFrom在模板中被渲染后所对应的html代码:
<tr> <th><label for="id_account">输入您的账号:</label></th> <td><input type="text" name="account" maxlength="20" required id="id_account"></td> </tr> <tr> <th><label for="id_password1">输入登录密:</label></th> <td><input type="password" name="password1" maxlength="20" required id="id_password1"> </td> </tr> <tr> <th><label for="id_password2">再次输入密:</label></th> <td><input type="password" name="password2" maxlength="20" required id="id_password2"></td> </tr>
同学们要注意的是,渲染后的表单不会包含<form>标签, <table>标签,以及提交按钮,我们必须自己在模板中进行定义。使用django内置的表单系统,其优势在于可以自动对用户的输入进行校验和清理。Form对象的校验方法:Form.is_valid()。该方法返回布尔类型,值为True时表示用户的输入合法,否则表示非法。
Form对象的数据清理
form对象在对数据验证通过以后,会自动对数据进行清理,所谓的数据清理,是指将数据标准化为Python中的数据类型,例如在Form类中定义了一个日期字段,如果用户的输入是字符串,那么在进行数据清理以后,会将它转换为datetime.date对象。form对象在对数据进行清理以后,会将清理后的值保存在cleaned_data属性中。cleaned_data是一个字典类型,字典中的键名与Form类中的字段名一致。
使用form对象对输入进行验证和清理:
from django.http import HttpResponse from django.shortcuts import render from .forms import RegisterForm def register(request): if request.method == 'POST': # 用户提交的输入保存在HttpRequest对象的POST属性中 form = RegisterForm(request.POST) if form.is_valid(): # 使用cleaned_data属性来获取清理后的用户输入 account = form.cleaned_data["account"] password1 = form.cleaned_data["password1"] password2 = form.cleaned_data["password2"] elif request.method == 'GET': # 请求方法为GET时,构造一个空的表单对象,传递给模板进行渲染 form = RegisterForm() return render(request, "register.html", {"register_form": form})
8.2.3 使用django表单
我们现在将8.1节中的代码,改为使用django表单,请读者按照以下步骤进行操作:
(1) 在django应用的目录中创建forms.py
在forms.py中定义RegisterForm,代码如下:
from django import forms # Create your forms here. class RegisterForm(forms.Form): account = forms.CharField(max_length=20) password1 = forms.CharField(max_length=20,widget=forms.PasswordInput) password2 = forms.CharField(max_length=20, widget=forms.PasswordInput)
(2) 更新register视图代码
from django.http import HttpResponse from django.shortcuts import render from .forms import RegisterForm def register(request): if request.method == 'POST': # 用户提交的输入保存在HttpRequest对象的POST属性中 form = RegisterForm(request.POST) if form.is_valid(): account = form.cleaned_data["account"] password1 = form.cleaned_data["password1"] password2 = form.cleaned_data["password2"] if password1 != password2: return HttpResponse("密码输入不匹配") else: return HttpResponse("注册成功") elif request.method == 'GET': # 请求方法为GET时,构造一个空的表单对象,传递给模板进行渲染 form = RegisterForm() # 将表单对象form传递给模板进行渲染 return render(request, "register.html", {"register_form": form})
(3) 更新模板register.html
更新后的代码如下:
<form action="/register/" method="POST"> {# django默认开启了csrf保护,需要再加上下面一行模板标签 #} {% csrf_token %} <table> {{register_form}} </table> <input type="submit" value="注册"> </form>
(4) 在浏览器中进行测试
启动django服务器以后,在浏览器中输入http://127.0.0.1:8080/register/:
django中的表单系统会自动对输入进行验证。现在我们不输入任何数据,直接点击注册按钮,此时页面弹出了错误提示信息:
8.2.4 最具实力的小班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4) Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲
扫码免费领取Python学习资料: