所以,我是django和djangorestframework的新人。我在他们的页面中按照他们的教程。 http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/
在该教程中,您可以从djangorestframework api登录页面以django用户身份登录。我的问题是,如果我想创建一个CLI或GUI应用程序并使用请求模块将内容发布到API,但必须首先登录API。我是怎么做到的?
答案 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
答案 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)
}
}