我有一個用 django 準備的用戶 API。但是,當我使用 Postman 應用程式發出 API 請求以進行測驗時,我收到 400 Bad Request 警告,可能是什么原因?如果有任何其他需要的代碼,我可以按如下方式撰寫我的所有代碼。
這是 views.py 代碼
from rest_framework_simplejwt.views import TokenObtainPairView
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from .serializers import CustomUserSerializer
from rest_framework_simplejwt.tokens import RefreshToken
from rest_framework.permissions import AllowAny
class CustomUserCreate(APIView):
permission_classes = [AllowAny]
def post(self, request, format='json'):
serializer = CustomUserSerializer(data=request.data)
if serializer.is_valid():
user = serializer.save()
if user:
json = serializer.data
return Response(json, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class BlacklistTokenUpdateView(APIView):
permission_classes = [AllowAny]
authentication_classes = ()
def post(self, request):
try:
refresh_token = request.data["refresh_token"]
token = RefreshToken(refresh_token)
token.blacklist()
return Response(status=status.HTTP_205_RESET_CONTENT)
except Exception as e:
return Response(status=status.HTTP_400_BAD_REQUEST)
這是我的網址
api/urls.py
from django.urls import path
from .views import CustomUserCreate, BlacklistTokenUpdateView
app_name = 'users'
urlpatterns = [
path('create/', CustomUserCreate.as_view(), name="create_user"),
path('logout/blacklist/', BlacklistTokenUpdateView.as_view(),
name='blacklist')
]
核心/網址.py
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
)
urlpatterns = [
path('admin/', admin.site.urls),
path("api/post/", include("post.api.urls", namespace="post")),
path("api/post/audio/", include("post_audio.api.urls", namespace="postaudio")),
path('api/comment/', include('comment.api.urls', namespace='comment')),
path("api/categories/", include("post.api.urls", namespace="categories")),
path("api/author/", include("author.api.urls", namespace="author")),
path("api/favourites/", include("favourite.api.urls", namespace="favourite")),
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
] static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
這也是我的 serializers.py 代碼
from rest_framework import serializers
from users.models import NewUser
class CustomUserSerializer(serializers.ModelSerializer):
email = serializers.EmailField(required=True)
user_name = serializers.CharField(required=True)
password = serializers.CharField(min_length=8, write_only=True)
class Meta:
model = NewUser
fields = ('email', 'user_name', 'password')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
password = validated_data.pop('password', None)
# as long as the fields are the same, we can just use this
instance = self.Meta.model(**validated_data)
if password is not None:
instance.set_password(password)
instance.save()
return instance
uj5u.com熱心網友回復:
據我所知,您可以從兩個地方收到錯誤請求:CustomUserCreate和BlacklistTokenUpdateView. 為了幫助您進行除錯,您可以添加日志,包括serializer.errors(in CustomUserCreate) 和內部 except in BlacklistTokenUpdateView。一個好的做法是避免捕獲通用例外。這樣你就會確切地知道它失敗的原因。
uj5u.com熱心網友回復:
根據您的代碼類“CustomUserCreate”,如果“serializer.is_valid()”回傳 false,則回傳 400 錯誤,我認為您沒有在 Postman 體內發送所需的引數。
如果發生任何例外,“BlacklistTokenUpdateView”類也會回傳 400 錯誤
uj5u.com熱心網友回復:
您能否提供有關您正在撥打的郵遞員電話的資訊?400 錯誤可能表明問題在于您如何構建來自該工具的請求。請發送任何標題、正文和完整的 URI。您可以從郵遞員控制臺匯出...
您發送的電子郵件值不是有效的電子郵件格式,而且您似乎也沒有發送 user_name,因此我懷疑請求在序列化程式級別驗證失敗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340988.html
標籤:Python 姜戈 接口 休息 Django 休息框架
上一篇:為什么有些Django類和默認應用程式被稱為API?
下一篇:如何從非英語值創建slug?
