2013-04-17 229 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更新了一些更好的建议重新标准会话登录,基于令牌的登录。 –