Django:request.body不为null,但request.POST为null

2024-09-29 17:15:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我想测试登录功能。
我用失眠来发出信号

像这样: enter image description here

我发现request.POST始终为空,但request.body不为空。
在终端中,输出如下:
print(request.body)b'{\n\t"userid" : "TEST",\n\t"userpw" : "TEST",\n\t"created" : ""\n}'
print(request.POST)<QueryDict: {}>

我在PyCharm中的代码:

models.py:

from django.db import models

class AppAddresses(models.Model):
   userid = models.CharField(max_length=30, null=False, default=False)
   userpw = models.CharField(max_length=30, null=False, default=False)
   created = models.DateTimeField(auto_now_add=True)

   class Meta:
      ordering = ['created']

serializers.py:

from rest_framework import serializers
from .models import AppAddresses


class AppAddressesSerializer(serializers.ModelSerializer):
    class Meta:
        model = AppAddresses
        fields = ['userid', 'userpw']

URL.py:

from django.contrib import admin
from django.urls import path, include
from addresses import views

urlpatterns = [
    path('app_login/', views.app_login),
    path('app_signup/', views.app_signup),
    path('admin/', admin.site.urls),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

views.py:

from django.contrib.auth.models import User
from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
from .models import AppAddresses
from .serializers import AppAddressesSerializer
from django.contrib.auth import authenticate

@csrf_exempt
def app_login(request):
    if request.method == 'POST':
        id = request.POST.get('userid', '')
        pw = request.POST.get('userpw', '')
        print(request.body)
        print(request.POST)

        login_result = authenticate(username=id, password=pw)

        if login_result:
            print("SUCCESS!")
            return JsonResponse({'code': '0000', 'msg': 'SUCCESS'}, status=200)
        else:
            print("FAILED!")
            return JsonResponse({'code': '1001', 'msg': 'FAILED'}, status=401)

    elif request.method == 'GET':
        query_set = AppAddresses.objects.all()
        serializer = AppAddressesSerializer(query_set, many=True)
        return JsonResponse(serializer.data, safe=False)


# ... skip ...

正如上面在views.py中所述,我想使用request.POST.get()获得值useriduserpw
但它总是返回空的。我已经搜索了很多帖子,但还不能解决这个问题。
谁能帮帮我吗


Tags: pathdjangofrompyimportfalseappmodels
2条回答

您需要使用^{}

id = request.data.get("userid")
pw = request.data.get("pw")

request.POST返回表单编码的值,不从主体解析JSON

考虑到您想要使用DRF,您可以用^{}decorator包装app_login函数,因为它将自动从JSON反序列化您的参数,并使它们可以作为request.data访问

@api_view(['POST'])
def app_login(request):
    ...
    id = request.data.get('userid', '')

相关问题 更多 >

    热门问题