jwt使用

刚好项目中遇到了JWT就自己整理到博客上,方便以后需要的时候使用

我们现在setting中配置一下

上面还有个注册的APPS里面组册一下还要下载模块
pip install djangorestframework-jwt     #这个是安装


#
################## 配置jwt验证 ###################### REST_FRAMEWORK = { # 身份认证 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.BasicAuthentication', ) } import datetime JWT_AUTH = { 'JWT_AUTH_HEADER_PREFIX': 'JWT', 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), 'JWT_RESPONSE_PAYLOAD_HANDLER': 'userapp.views.Login_return', # 重新login登录返回函数 } AUTH_USER_MODEL = 'userapp.User' #这个就是指定用我们的模型表

我们既然要用JWT就要用到token 写一个注册token的函数

def create_token(user):
    #生成jwt_token
    jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
    jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
    payload = jwt_payload_handler(user)
    token = jwt_encode_handler(payload)


    return token

我们就是注册一下我们的用户,先把反序列化写一下

class UserInfoSer(serializers.Serializer):
    username = serializers.CharField()
    password = serializers.CharField()
    email = serializers.CharField()
    phone = serializers.CharField()
    token = serializers.CharField(read_only=True)

    def create(self, validated_data):
        print(validated_data)
        user = User.objects.create(**validated_data)
        password = make_password(validated_data.get('password'))    #密码加密a
        user.password = password    #把加密的密码写入数据库
        user.save()     #提交数据
        token = create_token(user)
        user.token = token

        return user

Views里面的代码,就这么一点

###这里是注册
class
UserView(APIView): def post(self, request): data = request.data if not all(['username','phone','email','password','password2']): ret = { 'code':4003, 'msg':'参数不完整', } return Response(ret,status=200) print(data.get('password')) if data['password'] != data['password2']: ret = { 'code': 4005, 'msg': '两次密码不一致', } return Response(ret, status=200) try: user = serializer.UserInfoSer(data=data) user.is_valid() user.save() ret = { 'code': 0, 'msg': '成功老天', 'data':user.data } return Response(ret, status=200) except Exception as e: print(e) ret = { 'code': 0, 'msg': '失败老天', } return Response(ret,status=200) ##这里是登入 def Login_return(token ,user=None,request=None): return { 'token':token, 'user':user.username, }

url中也要配置一下

from userapp.views import UserView, UserInfoAPIView
from rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [
    path('users/',UserView.as_view()),
    path('login/',obtain_jwt_token)
]

这一切都完成后写个函数验证一下

class UserInfoAPIView(APIView):
    permission_classes = [IsAuthenticated]  # 接口中加权限     #这两个变量是从setting里面倒出来的,就是我们刚刚配置的那个,就是必须带着我们的token才能成功访问该接口
    authentication_classes = [JSONWebTokenAuthentication]

    def get(self, request):
        user = User.objects.all()
        users = UserSer(user,many=True).data

        return Response(users)

 

posted @ 2020-11-03 08:07  这是春天吧  阅读(129)  评论(0)    收藏  举报