您当前的位置: 首页 >  django

IT之一小佬

暂无认证

  • 1浏览

    0关注

    1192博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Django博客系统(忘记密码)

IT之一小佬 发布时间:2021-09-29 16:10:03 ,浏览量:1

1. 忘记密码页面展示

1.在users.views.py文件中定义视图

from django.views import View

class ForgetPasswordView(View):

    def get(self, request):

        return render(request, 'forget_password.html')

2.在users.urls.py文件中定义路由

from users.views import ForgetPasswordView
urlpatterns = [
    # 参数1:路由
    # 参数2:视图函数
    # 参数3:路由名,方便通过reverse来获取路由
    path('forgetpassword/', ForgetPasswordView.as_view(),name='forgetpassword'),
]

3.修改forget_password.html中的资源加载方式

    
    {% load staticfiles %}
    
    
    
    
    
    ...
    
    
    
    
    ...
    
    

4.修改login.html中的忘记密码的跳转连接

忘记密码?
2. 忘记密码接口设计

1.请求方式

选项方案请求方法POST请求地址/forgetpassword/

2.请求参数:表单

参数名类型是否必传说明mobilestring是用户名passwordstring是密码password2string是确认密码sms_codestring是短信验证码

3.响应结果:HTML

字段说明修改失败响应错误提示修改成功重定向到登录 3. 忘记密码接口实现
class ForgetPasswordView(View):

    def post(self, request):
        # 接收参数
        mobile = request.POST.get('mobile')
        password = request.POST.get('password')
        password2 = request.POST.get('password2')
        smscode = request.POST.get('sms_code')

        # 判断参数是否齐全
        if not all([mobile, password, password2, smscode]):
            return HttpResponseBadRequest('缺少必传参数')

        # 判断手机号是否合法
        if not re.match(r'^1[3-9]\d{9}$', mobile):
            return HttpResponseBadRequest('请输入正确的手机号码')

        # 判断密码是否是8-20个数字
        if not re.match(r'^[0-9A-Za-z]{8,20}$', password):
            return HttpResponseBadRequest('请输入8-20位的密码')

        # 判断两次密码是否一致
        if password != password2:
            return HttpResponseBadRequest('两次输入的密码不一致')

        # 验证短信验证码
        redis_conn = get_redis_connection('default')
        sms_code_server = redis_conn.get('sms:%s' % mobile)
        if sms_code_server is None:
            return HttpResponseBadRequest('短信验证码已过期')
        if smscode != sms_code_server.decode():
            return HttpResponseBadRequest('短信验证码错误')

        # 根据手机号查询数据
        try:
            user = User.objects.get(mobile=mobile)
        except User.DoesNotExist:
            # 如果该手机号不存在,则注册个新用户
            try:
                User.objects.create_user(username=mobile, mobile=mobile, password=password)
            except Exception:
                return HttpResponseBadRequest('修改失败,请稍后再试')
        else:
            # 修改用户密码
            user.set_password(password)
            user.save()

        # 跳转到登录页面
        response = redirect(reverse('users:login'))

        return response

运行效果:

 

关注
打赏
1665675218
查看更多评论
立即登录/注册

微信扫码登录

0.3502s