😺

【Django】Pythonで作るRest API【30Register View】

2023/02/19に公開

【30Register View】

YouTube: https://youtu.be/etuscCPIRt0

https://youtu.be/etuscCPIRt0

今回はユーザー作成のビューを作成します。

「username」のフィールドに「email」で
送られてきたデータを設定して、
「username」と「email」の不一致を防止しています。

また、同じメールアドレスのユーザーが重複しないように
条件分岐で処理を分けるようにしています。

myapp/accounts/views.py
from django.shortcuts import render
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from .serializers import UserSerializer, RegisterSerializer
from rest_framework import status
from django.contrib.auth.models import User
from django.contrib.auth.hashers import make_password

# Create your views here.
@api_view(['POST'])
def register(request):
  data = request.data

  user = RegisterSerializer(data=data)

  if user.is_valid():
    if User.objects.filter(username=data['email']).exists():
      return Response({'message': 'This user already exists'}, status=status.HTTP_400_BAD_REQUEST)
    else:
      user = User.objects.create(
        first_name = data['first_name'],
        last_name = data['last_name'],
        email = data['email'],
        username = data['email'],
        password = make_password(data['password'])
      )
      return Response({'message': 'User Register Success'}, status=status.HTTP_201_CREATED)
  else:
    return Response(user.errors, status=status.HTTP_400_BAD_REQUEST)

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def getMe(request):
  user = request.user

  serializer = UserSerializer(user, many=False)
  return Response(serializer.data)

ビューの設定ができましたら、
パスに追加します。

myapp/accounts/urls.py
from django.urls import path
from .views import getMe, register

urlpatterns = [
    path('me/', getMe, name='me'),
    path('register/', register, name='register'),
]

Discussion