我想测试登录功能。
我用失眠来发出信号
我发现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()
获得值userid
和userpw
。
但它总是返回空的。我已经搜索了很多帖子,但还不能解决这个问题。
谁能帮帮我吗
您需要使用^{} :
request.POST
返回表单编码的值,不从主体解析JSON考虑到您想要使用DRF,您可以用^{} decorator包装
app_login
函数,因为它将自动从JSON反序列化您的参数,并使它们可以作为request.data
访问相关问题 更多 >
编程相关推荐