如何使用Django Rest Framework创buildloginAPI?

我想创build一个loginAPI(或使用现有的一个,如果它已经预先捆绑)使用Djangorest框架。 不过,我完全不知所措。 每当我发送到Djangorest框架“login”的url发送请求,它只是发回可浏览的API模板页面…

我的configuration

urls.py

url(r'^api/v1/', include('rest_framework.urls', namespace='rest_framework')) 

settings.py

 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.BasicAuthentication', 'rest_framework.authentication.SessionAuthentication', ) } 

我想要的是

请求:

 POST /api/v1/login username='name' pass='pass' 

响应:

 200 OK "{username: 'name', 'userId': '54321'}" set-cookie: sessionid="blahblah" 

看看django-rest-framework-jwt的api视图。 这是创buildauth令牌而不是cookie会话的实现,但是您的实现将类似。 请参阅views.py和serializers.py 。 您可能可以使用serializers.py不变,只是调整您的意见,以返回正确的参数,并可能设置会话的cookie(如果已经在身份validation已经执行,不能回想起来)。

如果你想要这样的东西,我做同样的事情,但我使用令牌authentication。

在这里查看他们的令牌页面

这可能不是你想要的,但我这样做的方式是(因为我用它作为移动客户端的restAPI端点)

我可以做我的url localhost:8000/api/users/ -H Authorization : Token浏览器然后可以使用您在提供的rest框架url创build的常规login页面

url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')

并获取“无login”导航的令牌

url(r'^api-token-auth/', 'rest_framework.authtoken.views.obtain_auth_token')

那么如果你打电话,这样你可以通过授权令牌。 当然,这只是我的做法,可能不是最有效的方法,但我的目标是创build一种方法,可以向用户提供浏览器的会话身份validation和通过令牌的移动访问。

然后在您的views.py请确保您添加该视图的身份validation要求。 几乎与会话身份validation部分相同

permission_classes = (permissions.IsAdminUser,)

还包括

authentication_classes = (authentication.TokenAuthentication,)

我希望这可以帮助,但如果没有,祝你好运。

当然,令牌是validation的好方法,但是提问者正在询问会话validation。

请求:

 POST /api/v1/login username='username' password='password' 
  • csrftokencsrftoken X-CSRFToken标题中
  • 即使有人使用email作为用户名提交, username名称参数是必需的电子邮件input(例如username='sample@domain.com'

响应:

 302 FOUND sessionid="blahblah" 
  • 如果您未指定next值,则会自动redirect到/accounts/profile/ ,这可能会产生404错误