django-tastypieでAPIにベーシック認証をかける
django-tastypieを使えば、Djangoでモデル定義されたデータへアクセスするAPIを簡単に作成することができます。
先日サンプルを作成してみましたが、認証がかかっていないため、APIは誰でも叩けてしまいます。これはよくないですね
どこのだれだかわからない人に一発で全データを消されてしまいます。
そこで認証をかける必要があります。django-tastypieには認証をかける方法も用意されています。
認証はいくつか用意されていますが、一番簡単そうなベーシンク認証をかける方法を試してみました。
ベーシック認証をかけるにはResourceのMetaクラスにauthentication = BasicAuthentication()を記述します
resources.py
from tastypie.authentication import BasicAuthentication from tastypie.resources import ModelResource from tastypie.authorization import Authorization from app.models import Book class BookResource(ModelResource): class Meta: queryset = Book.objects.all() authentication = BasicAuthentication() authorization = Authorization()
認証に使われるuser/passはdjango.contrib.auth.models.Userのusernameとpasswordです。apiを利用するユーザーを作成しておきます。
requestsを使ったアクセス方法はこんな感じになります
import requests from requests.auth import HTTPBasicAuth # 取得 r = requests.get('http://localhost:8000/api/book/', auth=HTTPBasicAuth('user', 'pass')) # もしくは r = requests.get('http://localhost:8000/api/book/', auth=('user', 'pass'))