在python中验证restframework用户
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中验证restframework用户相关的知识,希望对你有一定的参考价值。
所以,我是django和djangorestframework的新人。我在他们的页面中按照他们的教程。 http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/
在该教程中,您可以从djangorestframework api登录页面以django用户身份登录。我的问题是,如果我想创建一个CLI或GUI应用程序并使用请求模块将内容发布到API,但必须首先登录API。我是怎么做到的?
在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
您可以设置用户必须始终作为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)
}
}
以上是关于在python中验证restframework用户的主要内容,如果未能解决你的问题,请参考以下文章
RESTFramework(DRF)进阶篇GenericAPIview-ViewSet类
RESTFramework(DRF)进阶篇GenericAPIview-ViewSet类