Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Django REST Frameworkに再挑戦 その17 User API Setup

概要

Django REST Frameworkに再挑戦 その17 User API Setup

参考サイト

www.django-rest-framework.org

www.codingforentrepreneurs.com

User API Setup

  • accounts/api/init.pyを作成する。

  • accounts/api/に、serializers.py, urls.py, views.pyを作成する。

  • accounts/api/serializers.pyにコードを書く。

from django.contrib.contenttypes.models import ContentType
from django.contrib.auth import get_user_model

from rest_framework.serializers import (
        HyperlinkedIdentityField,
        ModelSerializer,
        SerializerMethodField,
        ValidationError
        )

User = get_user_model() #これでUser modelを代入できる。なにげにこれはかなり便利だな。

class UserCreateSerializer(ModelSerializer):
    class Meta:
        model = User
        fields = [
            'username',
            'password',
            'email',
        ]
  • views.pyにコードを追記する。
from .serializers import (
    UserCreateSerializer,
    )

class UserCreateAPIView(CreateAPIView):
    serializer_class = UserCreateSerializer
    queryset = User.objects.all()
  • urls.pyにコードを追記する。
from django.conf.urls import url
from django.contrib import admin

from .views import (
    UserCreateAPIView,
    )

urlpatterns = [
    url(r'^register/$', UserCreateAPIView.as_view(), name='register'),
]
  • /api/users/register/ にアクセスして、登録してみる。登録はできた!

  • 登録したアカウントで、ログインしてみる。。。ログインできない!

  • admin で確認すると、Invalid password format or unknown hashing algorithm.と表示される。validationが必要。

  • とりあえず、passwordは読めないようにする。(write onlyにする)

class UserCreateSerializer(ModelSerializer):
    class Meta:
        model = User
        fields = [
            'username',
            'password',
            'email',
        ]
        extra_kwargs = {"password":
                            {"write_only": True}
                            }