栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

p6 day04用户登录

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

p6 day04用户登录

1.jwt介绍

1.什么是JWT

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录场景。JWT一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从服务器获取资源,也可以增加一些额外的其它业务逻辑的声明信息。

2.session会话保持及存在的问题

3.JWT会话保持的流程

2.djangorestframework-jwt框架

1.安装

pip install djangorestframework-jwt

2.配置全局的jwt认证

#配置jwt的全局认证
REST_FRAMEWORK = {
    # 身份认证
    'DEFAULT_AUTHENTICATION_CLASSES': ['rest_framework_jwt.authentication.JSONWebTokenAuthentication'],
}

from datetime import timedelta

JWT_AUTH = {
    # jwt过期时间
    'JWT_EXPIRATION_DELTA': timedelta(days=1),
}

3.登录的使用

 4.管理员登录

#重写authenticate实现管理员登录
class MyAuthentication(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):

        #查询用户对象
        user= Users.objects.filter(models.Q(username=username) |models.Q(phone=username)).first()

        #判断用户 /密码 /是否是管理员
        if user and  check_password(password,user.password)   and  user.is_staff  :
            return user
        else:
            return None

5.在settings.py中配置

JWT_AUTH = {
    # jwt过期时间
    'JWT_EXPIRATION_DELTA': timedelta(days=1),
    # 自定义返回数据
    'JWT_RESPONSE_PAYLOAD_HANDLER': 'users.utils.jwt_response_payload_handler',
}

6.配置settings.py中的==django认证==

#配置django的认证
AUTHENTICATION_BACKENDS= [
    'users.utils.MyAuthentication'
]

7.配置登录路由

from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [
    path('login/', obtain_jwt_token),
]
3.短信验证码

1.容联云地址:容联云通讯_短信平台、手机验证码、语音验证码、IM即时通讯、云呼叫系统等互联网通信服务

2.账号注册成功以后,系统分配授权信息

 3.添加测试号码

3.5 在Settings.py中配置容联云 账号信息

#配置容联云  账号信息
ACCID='8a216da8804ba8a5018064a09f03065f'

ACCTOKEN='6647b67a52b74fe4be11961110d24470'

APPID='8a216da8804ba8a5018064a09fe60666'

 4.安装SDK

pip install ronglian_sms_sdk

5.在utils.py中写代码

#发送短信
def send_message(sms_code,mobile,expire=5):
    #实例化sdk
    sdk=SmsSDK(settings.ACCID,settings.ACCTOKEN,settings.APPID)

    #组织数据
    tid='1' #短信模板
    mobile='%s'%mobile #手机号转换为字符串
    datas=('%s'%sms_code,'%s'%expire)  #手机验证码

    #发送短信,并解析响应
    res = sdk.sendMessage(tid=tid,mobile=mobile,datas=datas)

    #解析响应
    print('发送短信的响应',res,type(res))

    res_dict = json.loads(res)
    if res_dict.get('statusCode') == '000000':
        return True
    else:
        return False

6.定义路由

    #短信验证码
    path('sms_code/',views.MaaAPIVew.as_view()),

7.发送短信的视图

#发送短信的视图
class MaaAPIVew(APIView):
    def post(self,request):
        #1. 接收前端传来的数据
        mobile=request.data.get('mobile')
        uuid=request.data.get('uuid')

        # 2. 生成短信验证码
        sms_code="%d"%random.randint(100000,999999)

        #存储短信验证码
        redis_conn=redis.Redis(host='localhost',port=6379,db=3)
        redis_conn.set(uuid,sms_code,ex=300)

        #3. 请求容联云发送短信
        res=send_message(sms_code,mobile)

        if res:
            return Response({'code':200,'msg':'发送短信成功'})
        else:
            return Response({'code':400,'error':'发送失败'})
4.验证短信验证码

1.配置路由

from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token
from . import views
urlpatterns = [
    #验证短信验证码
    path('phone_verify/',views.SmsAPIVew.as_view()),
]

3.验证短信验证码视图  失去焦点触发

#验证短信验证码
class SmsAPIVew(APIView):
    def post(self,request):
        #接收前端数据
        sms_code=request.data.get('sms_code')
        uuid_=request.data.get('code_id')
        #查询redis  拿出存储的短信验证码
        redis_conn=redis.Redis(host='localhost',port=6379,db=3)
        stored_sms_code=redis_conn.get(uuid_)

        #判断
        if stored_sms_code and stored_sms_code.decode() ==sms_code:
            return Response({'code':200,'msg':'对比成功'})
        else:
            return Response({'code':400,'error':'对比失败'})

完成登录

今日报错

马虎大意了把jwt全局认证给写错了,以后不要再马虎大意了

#配置jwt的全局认证
REST_FRAMEWORK = {
    # 身份认证
    'DEFAULT_AUTHENTICATION_CLASSES': ['rest_framework_jwt.authentication.JSONWebTokenAuthentication'],
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/840646.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号