在python中验证restframework用户

时间:2018-03-01 05:40:20

标签: python django django-rest-framework

所以,我是django和djangorestframework的新人。我在他们的页面中按照他们的教程。 http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/

在该教程中,您可以从djangorestframework api登录页面以django用户身份登录。我的问题是,如果我想创建一个CLI或GUI应用程序并使用请求模块将内容发布到API,但必须首先登录API。我是怎么做到的?

2 个答案:

答案 0 :(得分:0)

在DRF中,您可以为简单的基于令牌的身份验证添加其他程序包。将rest_framework.authtoken添加到INSTALLED_APPS。要向客户端发出HTTP(S)请求,请传递授权令牌,如Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

测试时,您可以使用curl

curl -X GET http://127.0.0.1:8000/api/example/ -H 'Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

Read more...

答案 1 :(得分:0)

您可以设置用户必须始终作为settings.py中的默认设置进行身份验证(在您的Web服务器项目中):

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),

有关here的更多信息。

在您的Web客户端项目中,就像您提出的问题之一一样,您必须在发送到Web服务器的HTTP消息中添加Authentication头。一个示例(TypeScript Angular应用程序实现)将是:

import {Injectable} from '@angular/core';
import {HttpClient, HttpHeaders} from '@angular/common/http';
import {Observable} from 'rxjs/Observable';
import {Spacecraft} from '../model/spacecraft';

/* Create the authentication headers for the HTTP requests to the DRF project's API.
 * Note: uses btoa(): base-64 encoding of ASCII string, see https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/btoa.
 */
const basicAuthenticationToken = btoa(environment.REST_API.username + ':' + environment.REST_API.password);
const httpOptions = {
  headers: new HttpHeaders({
    'Authorization': `Basic ${basicAuthenticationToken}`
  })
};

@Injectable()
export class APICommunicationService {

  constructor(private http: HttpClient,
              private notificationsService: NotificationsService) {
  }

  getSpacecraftInfo(url: string): Observable<Spacecraft> {
    return this.http.get<Spacecraft>(url, httpOptions)
  }
}