#12.0 User Profile
- config의 urls.py에서 path("api/v1/users/", include("users.urls")), 다음과 같이 경로 추가
- users의 urls.py 생성
- views.py
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
from rest_framework.permissions import IsAuthenticated
from . import serializers
class Me(APIView):
permission_classes = [IsAuthenticated]
def get(self, request):
user = request.user
serializer = serializers.PrivateUserSerializer(user)
return Response(serializer.data)
def put(self, request):
user = request.user
serializer = serializers.PrivateUserSerializer(
user,
data = request.data,
partial = True,
)
if serializer.is_valid():
user = serializer.save()
serializer = serializers.PrivateUserSerializer(
user
)
return Response(serializer.data)
else:
return Response(serializer.errors)
- serializers.py
from rest_framework.serializers import ModelSerializer
from .models import User
class TinyUserSerializer(ModelSerializer):
class Meta:
model = User
fields = (
"name",
"avatar",
"username",
)
class PrivateUserSerializer(ModelSerializer):
class Meta:
model = User
exclude = (
"password",
"is_superuser",
"id",
"is_staff",
"is_active",
"first_name",
"last_name",
"groups",
"user_permissions",
)
- urls.py
from django.urls import path
from . import views
urlpatterns = [
path("me", views.Me.as_view() )
]
#12.1 Create User
- user를 만들 수 있게 해주는 api 작성할 것임
- views.py
from django.contrib.auth import authenticate, login, logout
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
from rest_framework.exceptions import ParseError, NotFound
from rest_framework.permissions import IsAuthenticated
from users.models import User
from . import serializers
class Me(APIView):
permission_classes = [IsAuthenticated]
def get(self, request):
user = request.user
serializer = serializers.PrivateUserSerializer(user)
return Response(serializer.data)
def put(self, request):
user = request.user
serializer = serializers.PrivateUserSerializer(
user,
data = request.data,
partial = True,
)
if serializer.is_valid():
user = serializer.save()
serializer = serializers.PrivateUserSerializer(
user
)
return Response(serializer.data)
else:
return Response(serializer.errors)
class Users(APIView):
def post(self, request):
password = request.data.get('password')
if not password:
raise ParseError
serializer = serializers.PrivateUserSerializer(data = request.data)
if serializer.is_valid():
user = serializer.save()
user.set_password(password)
user.save()
serializer = serializers.PrivateUserSerializer(user)
return Response(serializer.data)
else:
return Response(serializer.errors)
- urls.py
from django.urls import path
from . import views
urlpatterns = [
path("", views.Users.as_view()),
path("me", views.Me.as_view() ),
path("change-password", views.ChangePassword.as_view()),
path("log-in", views.LogIn.as_view()),
path("log-out", views.LogOut.as_view()),
path("@<str:username>", views.PublicUser.as_view()),
]
#12.2 Change Password
- urlpatterns에서 path 순서도 중요함! 순서에 따라 우선순위가 당연하게 생기니께
- 항상 기억하자 password는 절대 password그대로 저장하지 않음! 무조건 hash함수를 이용해서 저장!
#12.3 Login and Logout
- 장고 내에 authenticate이라고 username과 password 를 돌려주는 함수가 존재함
'Backend > Django' 카테고리의 다른 글
[백엔드][장고][Django] Chapter #4 (1) | 2023.12.30 |
---|---|
[백엔드][장고][Django] Chapter #15 (0) | 2023.07.25 |
[백엔드][Django][장고 채널스]Section3.영어 상황극 채팅 웹 서비스, 사전작업 (0) | 2023.07.24 |
[백엔드][Django][장고 채널스]Section2.영어 상황극 채팅 CLI 애플리케이션 만들기 (0) | 2023.07.24 |
[백엔드][Django][장고 채널스] Section1. openAI API 살펴보기 (1) (0) | 2023.07.24 |
Uploaded by Notion2Tistory v1.1.0