当数据提交到后台后,需要在视图函数中去验证数据的合法性.
django中提供了一个form表单的功能,这个表单可以用来验证数据的合法性还可以用来生成HTML代码
今天的登录注册案例我们就来使用这个django自带的form来生成前端页面以及验证数据.
①关于django form表单的使用:
-
创建一个forms.py的文件,放在指定的app当中,然后在里面写表单.
-
表单是通过类实现的,继承自forms.Form,然后在里面定义要验证的字段.
-
在表单中,创建字段跟模型是一模一样的,但是没有null=True或者blank=True等这几种参数了,有的参数是required=True/False.
-
使用is_valid()方法可以验证用户提交的数据是否合法,而且HTML表单元素的name必须和django中的表单的name保持一致,否则匹配不到.(比如此例中request.POST获取的HTML表单元素的name属性值与form表单中的name是一样的:username,password)
-
is_bound属性:用来表示form是否绑定了数据,如果绑定了,则返回True,否则返回False.
-
cleaned_data:这个是在is_valid()返回True的时候,保存用户提交上来的数据.
②注册的form表单:
max_length 最大长度
min_length 最小长度
widget 负责渲染网页上HTML 表单的输入元素和提取提交的原始数据
attrs 包含渲染后的Widget 将要设置的HTML 属性
error_messages 报错信息
注:虽然form可以生成前端页面,但这个功能实际用的少,主要是是用form表单的验证功能.
**创建forms.py的文件,创建注册的表单:
**
from django import forms
from django.core.validators import RegexValidator #导入校验器,供下面验证电话号码用
#校验登录
class LoginForm(forms.Form):
#长度校验/非空提醒
username = forms.CharField(max_length=16,min_length=6,error_messages=
{“max_length”:“长度不能超过16位”,
“min_length”:“长度不能小于6位”,
“required”:“用户名不能为空”
})
password = forms.CharField(max_length=16,min_length=6,error_messages=
{“max_length”:“长度不能超过16位”,
“min_length”:“长度不能小于6位”,
“required”: “密码不能为空”
})
#校验注册
class RegisterFrom(forms.Form):
长度校验/非空提醒
username = forms.CharField(max_length=16, min_length=6, error_messages=
{“max_length”: “长度不能超过16位”,
“min_length”: “长度不能小于6位”,
“required”: “用户名不能为空”
})
password = forms.CharField(max_length=16, min_length=6, error_messages=
{“max_length”: “长度不能超过16位”,
“min_length”: “长度不能小于6位”,
“required”: “密码不能为空”
})
phone = forms.CharField(max_length=11, min_length=1, validators=[RegexValidator(r"^1[3-9][0-9]{9}$",“手机号格式有误!”)],error_messages=
{“max_length”: “手机号只能为11位”,
“min_length”: “手机号只能为11位”,
“required”: “手机号不能为空”
})
email = forms.EmailField(error_messages={ #.EmailField方法会自动判断邮箱格式
“required”: “邮箱格式有误”
})
3.使用form表单的views.py视图文件:
from django.views import View
from .forms import LoginForm,RegisterFrom
from .models import User
Create your views here.
class LoginResponse(View):
def get(self,request):
username = request.session.get(“username”)
return render(request,“blog_server/login.html”,context={“username”:username})
def post(self,request):
“”"
登录逻辑
:return:
“”"
#获取用户数据
data = request.POST
#校验数据
form = LoginForm(data)
if form.is_valid(): #判断是否满足form中的校验
#判断用户是否存在
username = form.cleaned_data.get(“username”) # 获取经过form组件清洗过后的信息 用cleaned_data获取单个数据对象值
password = form.cleaned_data.get(“password”)
user = User.objects.filter(username=username, password=password).first() #获取用户实例
if user:
设置session信息
request.session[“username”] = user.username
return redirect(reverse(“login”)) #重定向到登录页面(重新请求登录页面) 不管登录成功与否都返回重新登录页面
else: #获取到form表单中的具体的错误格式的信息!
error = form.errors
err_li = []
for e in error: #error为类似字典类型。for循环得到的是字典的键
err_li.append(error.get(e).data[0].message+“,”)
return HttpResponse(err_li)
class RegisterResponse(View):
def get(self,request):
return render(request,“blog_server/register.html”)
def post(self,request):
“”"
注册逻辑
:return:
“”"
data = request.POST
#校验数据
form = RegisterFrom(data)
if form.is_valid():
#入库
username = form.cleaned_data.get(“username”)
password = form.cleaned_data.get(“password”)
try:
User.objects.create(username=username,password=password)
return redirect(reverse(“login”))
except Exception as e:
return redirect(reverse(“register”)) #如果出现异常,就返回注册页面!
else:
error = form.errors
err_li = []
for e in error: #error为类似字典类型。for循环得到的是字典的键
err_li.append(error.get(e).data[0].message+“,”)
return HttpResponse(err_li)
def logout(request):
“”"
退出登录
:param request:
:return:
“”"
request.session.flush()
return redirect(reverse(“login”))
4.注册及登录的HTML模板文件:
现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。
分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
、OPPO等大厂,18年进入阿里一直到现在。**
深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
[外链图片转存中…(img-30Dpy6cZ-1711032364491)]