美文网首页
2020-07-06--django项目完善--用户注册/登录验

2020-07-06--django项目完善--用户注册/登录验

作者: program_white | 来源:发表于2020-07-06 22:26 被阅读0次

    验证码的实现

    在django中有一个专门实现验证码的扩展包---django-simple-captcha

    1.安装:

    pip install django-simple-captcha
    

    2.配置:

    在MXOnline/settings.py中注册该组件

    3.在总urls.py下定义图片验证码的路由:

        #图片验证码
        url(r'^captcha/$',include('captcha.urls')),
    

    也就是已经安装好的captcha中:

    4.将该组件在mysql数据库中生成表(数据迁移)

    python manage.py makemigrations
    python manage.py migrate
    

    数据库:

    5.使用
    在使用这个包时,要与form表单配合使用,因为当用户进行注册时,就需要图片验证码的显示,那么我们可以将它看作一个类似于email和password的一个字段来看。

    在users/forms.py:

    #注册表单验证
    class UserRegisterForm(forms.Form):
        #email
        email = forms.EmailField(required=True)
        #密码
        password = forms.CharField(required=True,min_length=6,max_length=16,error_messages={
            'required':'密码必须填写',
            'min_length':'密码不少于6位',
            'max_length':'密码不能超过16位'
        })
        # 验证码
        captcha = CaptchaField()
    

    添加验证码字段captcha

    然后由于无论是get还是post请求,都需要刷新验证码,所以在这两个方法中都要获取表单实例,并返回到前端页面。

    在users/views.py中

        #get方式返回register.html
        def get(self, request, *args, **kwargs):
    
            #第一次请求时,也要访问验证码,只是显示验证码
            user_register_form = UserRegisterForm()
    
            return render(request,'register.html',{
                'user_register_form':user_register_form
            })
    
        #post方式处理提交的数据
        def post(self,request, *args, **kwargs):
    
            # 实例化表单,注意参数request.POST
            user_register_form = UserRegisterForm(request.POST)
            ....  
            ....
    

    在前端页面中展示验证码图片,找到验证码的form表单中的标签:

    <div class="form-group marb20 blur" id="jsRefreshCode">
             {{ user_register_form.captcha }}
    </div>
    

    完成。
    运行:
    输入正确的信息:

    直接登录,并跳转到index页面。

    输入错误信息时,会弹出相应的错误信息的提示

    优化登录

    那么在login中加入验证码登录是一样的步骤

    在form表单中加入字段:

    #验证码
    captcha = CaptchaField()
    

    在LoginView的get和post方法中都实例化表单并返回:

    get:
    login_form = LoginForm()      #获取表单实例,为了展示验证码
    post:
    login_form = LoginForm(request.POST)      
    

    在前端由于css样式的问题,直接将register.html中的注册form复制到login.html中相应位置。
    修改一些参数:

    • active地址:login
    • input标签中的name属性与后端获取的一致
    • 验证码展示的表单对象为login_form.captcha

    运行:
    输入正确的信息:

    登录成功

    输入验证码错误时,不报错,我也不知道为啥

    相关文章

      网友评论

          本文标题:2020-07-06--django项目完善--用户注册/登录验

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