我正在學習 DJANGO REST API。我決定使用Simple JWT. 我的來源是https://django-rest-framework-simplejwt.readthedocs.io/en/latest/getting_started.html#installation
所以在**settings** 我放:
from datetime import timedelta
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_FILTER_BACKENDS':(
'rest_framework.filters.SearchFilter',
'rest_framework.filters.OrderingFilter',
),
'SEARCH_PARAM':'search',
'ORDERING_PARAM':'ordering',
}
JWT_AUTH = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
'ROTATE_REFRESH_TOKENS': True,
'BLACKLIST_AFTER_ROTATION': True,
'UPDATE_LAST_LOGIN': True,
'AUTH_HEADER_TYPES': ('Bearer',),
'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
'USER_ID_FIELD': 'id',
'USER_ID_CLAIM': 'user_id',
'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule',
'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
'TOKEN_TYPE_CLAIM': 'token_type',
'JTI_CLAIM': 'jti',
'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
}
在網址中:
from django.contrib import admin
from django.urls import path,include
from rest_framework_simplejwt.views import (TokenObtainPairView,TokenRefreshView,)
urlpatterns = [
path('admin/', admin.site.urls),
path('api/auth/jwt/', TokenObtainPairView.as_view()),
path('api/auth/jwt/refresh/', TokenRefreshView.as_view()),
path('api/status/', include('status.api.urls'))
]
并在views.py:
from rest_framework import generics, mixins, permissions
from rest_framework.authentication import SessionAuthentication
from rest_framework.views import APIView
from rest_framework.response import Response
import json
from django.shortcuts import get_object_or_404
from status.models import Status
from .serializers import StatusSerializer
def is_json(json_data):
try:
real_json = json.loads(json_data)
is_valid = True
except ValueError:
is_valid = False
return is_valid
class StatusDetailAPIView(generics.RetrieveAPIView):
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
serializer_class = StatusSerializer
queryset = Status.objects.all()
lookup_field='id'
class StatusAPIView(mixins.RetrieveModelMixin,generics.ListAPIView):
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
serializer_class = StatusSerializer
passed_id= None
search_fields = ('user__username','content')
queryset = Status.objects.all()
def perform_create (self,serializer):
serializer.save(user=self.request.user)
在我的scripts/rest_framework_api.py:
import requests
import json
AUTH_ENDPOINT = "http://127.0.0.1:8000/api/auth/jwt/"
REFRESH_ENDPOINT = AUTH_ENDPOINT "refresh/"
ENDPOINT="http://127.0.0.1:8000/api/status/"
headers = { "Content-Type": "application/json" }
data = {
'username':'lulu',
'password':'lulu'
}
r = requests.post(AUTH_ENDPOINT,data=json.dumps(data),headers=headers)
token = r.json()['access']
refresh_data = { 'refresh': r.json()['refresh'] }
new_response = requests.post(REFRESH_ENDPOINT,data=json.dumps(refresh_data),headers=headers)
new_token = new_response.json()
print(new_token)
所以print(new_token)回傳“訪問”而不是“重繪 ”。
我做錯了什么,它不回傳“重繪 ”?
感謝您的洞察力/幫助解決它。
uj5u.com熱心網友回復:
該API端點的錯誤回應/api/auth/jwt/refresh/,你需要把重繪 令牌的手段refresh場(不tokenPOST請求主體的欄位)在客戶端測驗代碼,路徑/api/auth/jwt/refresh/在內部解決,TokenRefreshView它使用TokenRefreshSerializer輸入驗證以及串行化確實需要refresh場地。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/404797.html
標籤:
上一篇:在Django的視圖中編輯專案
下一篇:這兩個代碼有什么區別?
