簡體   English   中英

請求正文在Django中為空

[英]request body is empty in django

我正在使用create react app作為前端。我的問題是每個POST請求在Django端都不包含任何內容。 這是視圖:

def login(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        print(request.POST) // prints <QueryDict: {}>
        user = auth.authenticate(username=username, password=password)
        if user:
            token = Token.objects.get_or_create(user=user)
            return JsonResponse({'token': str(token[0])}, status=status.HTTP_200_OK)
        else:
            return JsonResponse({'error': 'Username/Password is not valid'}, status=status.HTTP_401_UNAUTHORIZED)

我已經在package.json中添加了"proxy": "http://localhost:8000"

這是反應部分:

handleSubmit(event) {
        event.preventDefault();
        axios({
            method: "post",
            url: "/api/auth/",
            data : {
                "username": this.state.username,
                "password": this.state.password
            }
        }).then(function (response) {
            console.log(response);
        }).catch(function(error){
            console.error(error.response.data["error"]);
        })
    }

我還檢查了前端網絡數據,請求正文中有用戶名和密碼。

urls.py

router = routers.DefaultRouter()
router.register(r'notes', views.NotesViewset)

urlpatterns = [
    url(r'^api/auth/', views.login),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^api/', include(router.urls)),
    url(r'^', views.BunnyAppView.as_view()),
]

您將在request.data獲取數據, request.POST用於表單編碼的數據。

但是,如果要在request.POST QueryDict中添加數據,則需要對數據進行編碼。

axios的默認內容類型為application/json

Axios公司支持URLSearchParams其可以被用於發送該數據作為application/x-www-form-urlencoded從瀏覽器:

var params = new URLSearchParams();
params.append('username', this.state.username);
params.append('password', this.state.password);

axios({
      method: "post",
      url: "/api/auth/",
      data : params
})

或者,您可以使用qs類的庫對數據進行編碼:

var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 });

在axios和django中遇到了這個問題。 為防止請求主體為空,應使用self.request.data。 這是整個工作解決方案:

軸距:

axios.defaults.headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
    "Authorization": "Token " + this.props.token
}
axios.post('http://127.0.0.1:8000/categoryCreate/', {
    name: name,
})
.then(res => {

})

views.py

class CategoryCreateAPIView(generics.CreateAPIView):
    serializer_class = CategoryCreateSerializer

    def perform_create(self, serializer):
        print(self.request.data)
        name = self.request.data["name"]
        print(name)
        serializer.save(name=name, user=self.request.user)

serializers.py

class CategoryCreateSerializer(serializers.ModelSerializer):
    name = serializers.CharField()

    class Meta:
        model = Flokkur
        fields = ('name', )

urls.py:

path('categoryCreate/', CategoryCreateAPIView.as_view()),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM