Django Template 10.表单类1-展示类

本文介绍如何在Django项目中使用自带的表单类创建forms.py,实现用户登录验证。通过新建表单类,设置密码输入框的widget,将表单与HTML模板结合。在视图中接收POST数据,进行数据校验,利用Django的is_valid()方法检查数据合法性,并使用authenticate方法验证用户信息。最后,通过内置的login方法将用户信息存入session,实现用户登录功能。
摘要由CSDN通过智能技术生成

自带表单类

之前登录的html里有表单
django里有自己的forms表单类,然后渲染到网页里

新建forms.py

其中密码输入框是有自己的widget形式
form跟model很像,官网有个对比图

from django import forms
class LoginForm(forms.Form):
    sname = forms.CharField(max_length=30, label=u'姓名')
    spwd = forms.CharField(label=u'密码',widget= forms.PasswordInput)

建path、view和html

在view里引用刚才的表单类,传递给html

html里只需写form框和提交按钮,
在里面加上该表单类,就可以加载表单类里面的用户名和密码等表单项

as_p的作用是将用户名和密码元素用p括起来
F12可以看到代码

path('index11/', views.Index11View.as_view()),

class Index11View(View):
    def get(self, request):
        loginForm = LoginForm()
        return render(request, 'index10.html', {'loginForm': loginForm})

    <form action="/stu/index11/" method="post">
        {% csrf_token %}
        {{ loginForm.as_p }}
        <input type="submit">
    </form>

提交后验证

获取post字典

当数据从表单中以post的方式提交后,继续写view,走post方法,接收到的request.POST,根据我们之前学过的它是键值对的字典,在控制台测试下:

from stu.forms import *
user = {'sname':'zhangsan','spwd':'123'}
loginForm = LoginForm(user)
print(loginForm)
<tr><th><label for="id_sname">姓名:</label></th><td><input type="text" name="sname" value="zhangsan" maxlength="30" required id="id_sname"></td></tr>
<tr><th><label for="id_spwd">密码:</label></th><td><input type="password" name="spwd" required id="id_spwd"></td></tr>

可以看到,传递给forms数据后,它会填充value值

校验

数据利用系统自带的admin用户表,它带很多自己的方法,用起来方便

  1. 校验数据是否合法:is_valid(),返回true和false
  2. 获取合法的数据:cleaned data
  3. 校验与admin用户名和密码是否匹配:authenticate
    由于sname与admin的username字段不一致,不用拆包,可以赋值
  4. 将用户信息存放至session:自带ogin方法,需要引入
def post(self,request):
    loginForm = LoginForm(request.POST)
    if loginForm.is_valid():
        data = loginForm.cleaned_data
        user = authenticate(username=data['sname'],password=data['spwd'])
        # User.objects.filter(username=)
        if user:
            login(request, user)
            # request.session['user'] = 
            return HttpResponse('登录成功')
    return HttpResponse('登录失败')

登录成功,会在登录页面看到有session
session过期时间2周

里面写的#是与自己数据库比较的方法,比较麻烦,之前学的保存session信息还需要序列化,还是django自带的比较简单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值