用djangorestframework编写一个jwt案例
时间: 2024-02-10 13:39:31 浏览: 22
好的,这是一个基于 Django 和 Django REST framework 的 JWT 认证的示例。首先需要安装 `djangorestframework-simplejwt` 包。
安装命令:
```
pip install djangorestframework-simplejwt
```
安装完成后,在 `settings.py` 中添加以下配置:
```python
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
],
}
```
接下来,创建一个获取 JWT Token 的视图:
```python
from rest_framework_simplejwt.views import TokenObtainPairView
class ObtainTokenPairView(TokenObtainPairView):
serializer_class = MyTokenObtainPairSerializer
```
这里我们自定义了一个 `MyTokenObtainPairSerializer`,用于在 JWT Token 中添加一些自定义的信息。该类继承自 `TokenObtainPairSerializer`。
```python
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
@classmethod
def get_token(cls, user):
token = super().get_token(user)
# Add custom claims
token['username'] = user.username
token['email'] = user.email
return token
```
在 `urls.py` 中添加路由:
```python
from django.urls import path
from .views import ObtainTokenPairView
urlpatterns = [
path('api/token/', ObtainTokenPairView.as_view(), name='token_obtain_pair'),
]
```
现在,我们就可以通过访问 `/api/token/` 接口来获取 JWT Token 了。该接口接收 `username` 和 `password` 两个参数。
接收到 Token 后,我们可以在请求头中添加 `Authorization` 字段,将 Token 作为值传递给服务端。服务端会通过 JWT 认证,根据 Token 中的信息来识别用户身份。例如:
```
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsImV4cCI6MTYzNzQ1MDE0OCwianRpIjoiNzRkNGI5MDItMzYzZS00MGYzLWJjMDQtMjQxZTJlNTFkZDZiIn0.64cJZuVzRq_V3f3cddtb3K4JjjxZ1a3sPvzv8R0fP8g
```
服务端可以通过如下代码读取 Token 中的信息:
```python
from rest_framework_simplejwt.authentication import JWTAuthentication
class MyView(APIView):
authentication_classes = [JWTAuthentication]
def get(self, request):
user = request.user
# access user info from user variable
```