2017-10-08 43 views
0

我正在爲前端使用create react應用程序。我的問題是每個POST請求都不包含django端的內容。以下是視圖:請求正文在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()), 
] 
+0

試'request.data'不是'request.POST' –

+0

AttributeError:'WSGIRequest'對象沒有'data'屬性 @JahongirRahmonov – pyprism

+0

你使用的是什麼版本的Django? –

回答

2

您將在request.data獲取數據,request.POST是形式編碼的數據。

但是,如果你想在request.POST QueryDict中的數據,你需要編碼數據。

axios default content-type is 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 }); 
+0

仍然是同樣的問題。 – pyprism

+0

我想你的請求的網址有問題。你可以添加登錄視圖的urlpattern問題 – Satendra

+0

更新我的問題。 – pyprism