3

我正在寻找使用 django rest 和 angular 处理登录用户的最佳方法。目前我正在控制器中执行此操作,

$http.post('accounts/login/', $scope.user).then(function(response){

这是视图,

def login(request, *args, **kwargs):
    if request.method == 'POST':
        data = json.loads(request.body)
        username = data['username']
        password = data['password']
        //rest of login function

它有效,但似乎有一个我没有在这里遵循的最佳实践。

4

2 回答 2

1

我能想到的唯一“更好”的做法是:

from rest_framework.response import Response
from rest_framework.decorators import api_view

@api_view(['POST'])
def login(request):
    data = request.DATA
    # authenticate using data dict
    return Response({'status': 'ok'})

这样您就不需要手动解码 json 并将视图限制为仅 POST,因此无需检查请求方法。

于 2013-09-25T17:21:41.193 回答
1

当然还有很多更好的解决方案。您正在使用的东西很好,但不适用于开发更复杂的项目。让我带你参观一下:

解决方案是在 django 中使用 Rest API。有很多很棒的库可以为 django 提供 rest api 系统,但我建议使用 django-rest-framework。(至少我用它做了很多项目:)

要在您的项目中安装它,请遵循 安装 django rest 框架的指南

并且要为 Angular 提供登录 api,您应该使用该库提供的身份验证系统之一,或者创建自己的身份验证系统。如果您在 django 模板引擎中使用 Angular,我建议使用 SessionAuthentication,如果不使用 BasicAuthentication(或者如果您想要更好的解决方案,请使用 jwt 或 oauth 等第三方应用程序。这完全取决于您的项目)。

基本上,这些身份验证系统所做的是检查请求中是否提供了凭据。例如,如果您使用的是 basicAuthentication,则所有请求都应包含一个Authorization: token <token>标头(这是 angular$http方法应将此标头放在每个请求上的部分。)

此外,您应该创建一些 API 来获取、验证和刷新从服务器接收的令牌。我建议阅读本节,使用 django-rest-framework 添加 TokenAuthentication

随时在评论中提出任何问题。如果我能在这条路上帮助你,我会很高兴。

于 2018-11-28T04:25:10.700 回答