私はDjangoの新人であり、DRFを使用して小さなAPIを構築することができました。angular.jsクライアントがユーザー認証の詳細をポストし、DRFが次のようなトークンを返します。
{ 'token' : '9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b' }
tutorial に基づいて、request.user
から詳細を取得することになっていますが、どこでこれを行うかわかりません。それは良い例を与えないので、私はそれを混乱させます。それをどのように回避するかについてアイデアを持っている人はいますか?あなたの入力は高く評価されます。
以下は私のビューとシリアライザのコードです。
from serializers import ExampleSerializer
from models import Example
from rest_framework import viewsets
class ExampleViewSet(viewsets.ModelViewSet):
"""
Example api description
"""
queryset = Example.objects.all()
serializer_class = ExampleSerializer
シリアライザ
from models import Example
from rest_framework import serializers
class ExampleSerializer(serializers.ModelSerializer):
class Meta:
model = Example
fields = ('id', 'field_one', 'field_two', 'created_at', 'updated_at')
depth = 1
AngularとDRF ...も初めてということを覚えておいてください。
すでにトークンを受け取っている場合は、angularjs側で、後続のリクエストのヘッダーにトークンを含める必要があります。おそらく、次のような認証リクエストからの省略コードです。
$http({auth request code here}).then(function(response){
var token = response.headers().token
$http.defaults.headers.common['Authorization'] = 'Token ' + token;
});
ビューセットでは、おそらく
authentication_classes = (TokenAuthentication,)
関連するどんなpermission_classesも一緒に。
Angular httpリクエストにトークンを含める場合、おそらく次のようにrequest.userでユーザーを参照できると思います
def list(self, request):
queryset = SomeObject.objects.filter(owner=request.user)
または、ここに別の使用方法があります(ユーザーモデルはDjango.contrib.auth.models.Userです):
class UserView(RetrieveAPIView):
model = User
serializer_class = UserSerializer
def retrieve(self, request, pk=None):
"""
If provided 'pk' is "me" then return the current user.
"""
if request.user and pk == 'me':
return Response(UserSerializer(request.user).data)
return super(UserView, self).retrieve(request, pk)
私の場合、API RESTクライアントでAPIをテストしようとしています。構成にヘッダーを配置すると機能します。
Authorization: Token <<token>>