[英]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.