2013-04-17 231 views
2

我有抓住了在JSON格式格式化這樣Django的REST框架

[{"UserName": "alexgv", "Password": "secretpassword"}] 

這裏POST數據的方法的方法

def Login(request, *args): 
    data = request.DATA 
    return Response(data) 
""" 
try: 
    m = User.objects.get(UserName=request.DATA['UserName']) 
    if m.password == request.DATA['Password']: 
     request.session['member_id'] = m.id 
     return HttpResponse("Testing") 
except User.DoesNotExist: 
    return HttpResponse("Your username and password didn't match.") 
""" 

我希望能夠把只有一個變量從那個json POST開始。例如,也許我只想抓住用戶名或密碼。我會怎麼做?我嘗試了各種各樣的東西,但似乎無法讓它工作,我不想使用request.POST.get,因爲那意味着我將不得不發送POST變量。順便說一句我正在使用這http://django-rest-framework.org/。我已經閱讀了文檔,但似乎無法找到任何內容。任何幫助表示讚賞。它現在返回的是一切。

回答

3

是這樣的...

username = request.DATA['UserName'] 

順便說一句,你可能不應該寫入基於會話的API登錄自己的意見,因爲它很容易做錯事。

對於提供AJAX風格的功能的API的你有兩個不錯的選擇:

  • 登錄使用標準的Django登錄,由用戶進行,而不是由API客戶端執行。
  • 使用基於證書的身份驗證方案,而不是基於會話,並使用AJAX執行登錄。例如,左塞爾第三方軟件包是一個偉大的圖書館,包括基於令牌的登錄和其他相似的看法... https://github.com/sunscrapers/djoser

更新還發現https://github.com/JamesRitchie/django-rest-framework-sav這可能是值得的AJAX會話驗證一下。

+0

針對允許登錄的API視圖提供建議的原因是什麼?鑑於所有SPA JS選項,我敢打賭,這在DRF用戶中並不罕見。 – jmq

+0

@jmq更新了一些更好的建議重新標準會話登錄,基於令牌的登錄。 –