美文网首页
8.写一个表单验证

8.写一个表单验证

作者: 何阿驼 | 来源:发表于2018-07-12 15:52 被阅读0次

在数据库创建的时候,我们要创建一些用户,为了统一管理,我们将创建一个用户类继承自Django自带的用户类,并对其进行权限的分类,

1530991530327.png 1530991566071.png

可以看出AbstractUser就是Django自带的用户类。

1530991620542.png

并且他自带了很多需要自带的字段,我们继承之后只要外加自己想要加入的字段就可以

登录

首先,我们做一个登录的表单,我们拿之前自己创建的管理员用户去登录。

1.流程

1530991791188.png

点击登录

1530991805119.png

输入账号密码

点击登录

登录成功之后跳转到首页面

1531059779150.png
/views.py
class Login_View(View):
    def get(self,request):
        #因为是登录模块的表单验证,所以如果是get请求,则账号密码可能会暴露在url地址栏中,所以我们是
        #拒绝这样的请求的,如果他是get请求,则直接返回空页面给用户
        return render(request,'login.html')
    def post(self,request):
        # 如果是post请求,则1.我们要拿到账号和密码 2.检查账号密码是否符合要求。3.符合要求之后是否存在于数据库中
        # 4.如果存在,则跳转至登录界面,并且显示登录成功。如果失败,则清空输入框跳转至登录
        form = loginForm(request.POST)#加载表单也就是post上来的表单数据
        if form.is_valid(): #valid有效的,这里判断form表单是否有效
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(username=username,password=password)
            if user is not None:
                if user.is_active:
                    login(request,user)
                else:
                    return render(request,'login.html',{'message':'账号未激活'})
            else:
                return render(request,'login.html',{'message':'不好意思,不存在这个账号'})
        else:
            return render(request,'login.html',{'form_message':form})
/urls.py
path('login/',Login_View.as_view(),name = 'login'),

form表单

我们会单独写一个form.py文件来专门写form。这个form里面写了对提交数据的一些约束

1531004133609.png

这些约束其实大部分就是字段的内容。

另外对于我们传向模板的参数中,有一个form

这个form自带了一些判断。

比如我们可以用来

<div class="form-group marb20 {% if form_message.username.errors %} errorput{% endif %}">
    <label>用&nbsp;户&nbsp;名</label>
    <input name="username" id="account_l" type="text" placeholder="手机号/邮箱" />
</div>

form_message.username.errors

如果post传递的username为空,则会出现errorput的错误样式

1531002971158.png
<div class="error btns login-form-tips" id="jsLoginTips">
{% for key, error in form_message.errors.items %}
    {{ error }}
{% endfor %}
    {{ message }}
</div>

同样可以通过这个方法来取值。显示错误信息

1531002981757.png

使用邮箱登录

1.测试数据

1531003521859.png

2.流程

使用django的指定认证后端Django AUTHENTICATION_BACKENDS

使用Q操作查询数据库中的内容

查找username=username 或者email=username

如果存在则返回user

什么是认证后端

Django维护一个”authentication backends”的列表用来测试认证。当调用 django.contrib.auth.authenticate() — Django将尝试所有的认证后端。如果第一个认证方法失败了,Django将会继续尝试第二个,直到所有的都被尝试过。 认证后端的列表在 AUTHENTICATION_BACKENDS 设置。内容应该是包含Python路径的元组。默认情况下, AUTHENTICATION_BACKENDS 设置为 (‘django.contrib.auth.backends.ModelBackend’,),这是检测Django用户数据库的基本认证方案。 按照 AUTHENTICATION_BACKENDS 的排列顺序,如果同样的用户名和密码在第一次就匹配了,那么Django将停止处理后面的东西。

1.在setting.py中设置内容

AUTHENTICATION_BACKENDS=(
    'users.views.CustomBackend',
)

2.在view.py里面编写内容

1531059767832.png
from django.db.models import Q
1531003811850.png

这里重写了authenticate这个函数。方法就是因为我们需要根据邮箱来登录验证。所以当我们输入任何内容取认证的时候,他都会来到这个方法中取验证。首先验证username,发现错误之后,因为是Q函数,所以他会取调用email=username。如果通过则会使用user.check_password(password)验证莫玛。成功则返回user

这样一个登录的表单验证就做好了,接下来是登出

1531004540151.png 1531004551287.png

注册

1.流程

1531057567569.png

点击注册,跳转到注册界面

1531057600925.png

这是一个post请求,同时还附带了一个get请求。

验证码

其中验证码的图片是一个get请求。我们要使用到另外一个插件库

django-simple-captcha

1531058101261.png 1531058131148.png 1531058185155.png 1531058382011.png 1531058392611.png 1531059032098.png 1531059046584.png

账户验证激活

当注册成功后,会自动登录。但是账号未被激活,这个时候我们需要发送邮箱来激活这个账号

1.首先我们需要在setting.py中设置

1531059255568.png

email_host_user 为你的QQ邮箱账号

email_host_password为你的授权的密码

email_from 为你的QQ邮箱账号

1531059407330.png 1531059423135.png

写一个专门生成随机字符串的方法来提供调用

紧接着写一个用来判断注册链接和忘记密码链接的方法

这些内容写在一个utile文件夹下,专门用来存放脚本的文件夹

另外,我们还需要在写一个方法用来激活这些内容

使用的是get请求

1531059608246.png

这是激活

1531059643782.png

这是忘记密码和更新密码

1531059664670.png 1531059676118.png
1531059684295.png

modelform

一般的form表单是这样的,引用的是django.form.Form

1531064511412.png

但是一旦需要验证的字段过多就会出现不断重写Field

做普通的form表单
可以对form表单进行一定的限制,比如required=TRUE 表示该内容必须不为空,否则会报错(相当于blank=true,null=true),
min_length = 2表示最小长度为2,max_length =20表示最大长度为20
缺点:代码的重复性过高

这个时候出现出现了modelform

1531065060218.png

相关文章

  • 8.写一个表单验证

    在数据库创建的时候,我们要创建一些用户,为了统一管理,我们将创建一个用户类继承自Django自带的用户类,并对其进...

  • vue+element 表单验证问题

    常规表单验证、自定义表单验证、动态增删表单验证 1.常规表单验证 2.自定义表单验证 3.动态增减 a.表单 b.表格

  • Vue 后台管理项目4-登录页表单验证

    登录页表单验证 1.登录页表单验证 Ⅰ.在饿了吗Form表单组件下,找到表单验证示例 Form 组件提供了表单验证...

  • 九、疯狂的表单

    疯狂的表单 新增表单控件 新增表单属性 表单验证反馈 关闭验证

  • from 表单验证

    from 表单验证: 1、数组表单验证:

  • 表单验证

    今天写一篇关于表单验证的文章 在此之前可能大多数人的表单验证都是很直接的获取表单中输入框的值来进行正则验证,判断输...

  • HTML5表单新验证

    表单新验证属性 表单新验证状态

  • day47-Django表单验证图片上传和分页技术

    一、表单验证 1.定义验证表单 2.使用表单验证is_valid():验证参数是否有效,如果参数验证成功返回Tru...

  • 验证

    验证 表单请求验证类 必须 使用 表单请求 - FormRequest 类 来处理控制器里的表单验证。 验证类的 ...

  • 表单验证

    表单验证:表单验证是一门处理在一个web表单里检查用户提供的信息是否正确的技术,表单验证意味着和用户的交流并引导他...

网友评论

      本文标题:8.写一个表单验证

      本文链接:https://www.haomeiwen.com/subject/gwlrpftx.html