使用JWT获取用户信息是在Django Web应用开发中非常常见的需求之一。下面是使用Django和JWT实现获取用户信息的完整攻略:
1. 安装依赖
首先,我们需要安装Django和PyJWT依赖,其中,PyJWT是用于实现JWT的Python库:
pip install django
pip install pyjwt
2. 配置settings.py
在Django项目的settings.py文件中,需要加入以下配置:
INSTALLED_APPS = [
# ...
'rest_framework',
'rest_framework_jwt'
]
MIDDLEWARE = [
# ...
'corsheaders.middleware.CorsMiddleware',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
}
JWT_AUTH = {
'JWT_VERIFY_EXPIRATION': True,
'JWT_ALLOW_REFRESH': True,
'JWT_REFRESH_EXPIRATION_DELTA': timedelta(days=7),
'JWT_AUTH_HEADER_PREFIX': 'Bearer',
}
上面的配置将在REST框架中启用JWT身份验证,并将JWT身份验证作为默认身份验证类。其中包括对令牌到期的验证、刷新令牌的实现、指定JWT前缀等设置。
3. 编写views代码
我们在views.py
中创建一个视图,来演示如何使用JWT获取用户信息:
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework.permissions import IsAuthenticated
class UserDetailView(APIView):
authentication_classes = (JSONWebTokenAuthentication,)
permission_classes = (IsAuthenticated,)
def get(self, request):
user = request.user
user_info = {
'id': user.id,
'username': user.username,
'email': user.email
}
return Response(user_info)
上述的代码实现了用户信息获取的视图,使用JSONWebTokenAuthentication
进行身份验证,IsAuthenticated
进行权限控制,当用户携带有效的JWT token访问该视图时,将返回该用户信息的JSON格式数据。
在上面的代码片段中,使用了request.user
获取当前用户信息,并将信息封装到字典类型的数据中,然后以JSON格式数据进行返回。
4.测试
开始测试,在浏览器中,输入http://127.0.0.1:8000/users/1/
,将返回用户信息,即如下的JSON格式数据:
{
"id": 1,
"username": "user1",
"email": "user1@example.com"
}
示例2
class UserLoginView(APIView):
throttle_classes = ()
permission_classes = [AllowAny]
def post(self, request):
serializer = UserLoginSerializer(data=request.data, context={'request': request})
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
token = serializer.validated_data['token']
user_info = {
'id': user.id,
'username': user.username,
'email': user.email,
'token': token
}
return Response(user_info)
上述示例2实现了用户登录的代码,这里使用了自定义的UserLoginSerializer对用户名和密码进行验证,然后生成JWT token返回给客户端,同时返回用户信息。
总结
通过本攻略的步骤,我们成功的使用Django和JWT实现了用户信息获取和登录功能。其实,当你在开发Django Web应用时,你会发现JWT非常适合用于API的身份验证和身份验证服务,这里只是做了基础的介绍,更为灵活的使用方式可以根据自己的需要进行调整。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django如何使用jwt获取用户信息 - Python技术站