(十二)Django学习——状态保持之cookie及升级版的session;登录注册小案例实现(使用Django中的form表单来进行用户输入数据的校验;学习form表单的使用;附带源码!

当数据提交到后台后,需要在视图函数中去验证数据的合法性.

django中提供了一个form表单的功能,这个表单可以用来验证数据的合法性还可以用来生成HTML代码

今天的登录注册案例我们就来使用这个django自带的form来生成前端页面以及验证数据.

①关于django form表单的使用:
  1. 创建一个forms.py的文件,放在指定的app当中,然后在里面写表单.

  2. 表单是通过类实现的,继承自forms.Form,然后在里面定义要验证的字段.

  3. 在表单中,创建字段跟模型是一模一样的,但是没有null=True或者blank=True等这几种参数了,有的参数是required=True/False.

  4. 使用is_valid()方法可以验证用户提交的数据是否合法,而且HTML表单元素的name必须和django中的表单的name保持一致,否则匹配不到.(比如此例中request.POST获取的HTML表单元素的name属性值与form表单中的name是一样的:username,password)

  5. is_bound属性:用来表示form是否绑定了数据,如果绑定了,则返回True,否则返回False.

  6. 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)
img

、OPPO等大厂,18年进入阿里一直到现在。**

深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
[外链图片转存中…(img-30Dpy6cZ-1711032364491)]

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值