https://github.com/SoonGyum/team9_djangotimes
GitHub - SoonGyum/team9_djangotimes
Contribute to SoonGyum/team9_djangotimes development by creating an account on GitHub.
github.com
from django.urls import path
from . import views
urlpatterns = [
path("signup/", views.SignupView.as_view()),
path("signin/", views.SigninView.as_view()),
path("<str:username>/", views.ProfileView.as_view()),
]
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class User(AbstractUser):
profile_image = models.ImageField(upload_to='profile_images/', null=True, blank=True)
introductions = models.TextField(null=True, blank=True)
def __str__(self):
return self.username
from .models import User
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = (
"id",
"username",
"email",
"profile_image",
"introductions",
)
from django.core.validators import validate_email
from .models import User
def validate_signup(signup_data):
username = signup_data.get("username")
password = signup_data.get("password")
nickname = signup_data.get("nickname")
birth = signup_data.get("birth")
first_name = signup_data.get("first_name")
last_name = signup_data.get("last_name")
email = signup_data.get("email")
err_msg_list = []
# validation
# validation dup username
if User.objects.filter(username=username).exists():
err_msg_list.append({"username" : "이미 존재하는 유저네임입니다."})
# validation email
try:
validate_email(email)
except:
err_msg_list.append({"email": "올바른 이메일 형식이 아닙니다."})
# validation dup email
if User.objects.filter(email=email).exists():
err_msg_list.append({"email": "이미 존재하는 이메일입니다."})
if err_msg_list:
return False, err_msg_list
else:
return True, err_msg_list
from django.shortcuts import render
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import User
from .validators import validate_signup
from .serializers import UserSerializer
from django.contrib.auth import authenticate
from rest_framework_simplejwt.tokens import RefreshToken
from rest_framework.permissions import IsAuthenticated
from rest_framework.parsers import MultiPartParser, FormParser
class SignupView(APIView):
parser_classes = [MultiPartParser, FormParser]
def post(self, request):
is_valid, err_msg = validate_signup(request.data)
if not is_valid:
return Response({"error": err_msg}, status=400)
username = request.data.get("username")
password = request.data.get("password")
email = request.data.get("email")
first_name = request.data.get("first_name", "")
last_name = request.data.get("last_name", "")
introductions = request.data.get("introductions", "")
profile_image = request.FILES.get("profile_image")
user = User.objects.create_user(
username=username,
password=password,
email=email,
first_name=first_name,
last_name=last_name,
introductions=introductions,
profile_image=profile_image
)
serializer = UserSerializer(user)
return Response(serializer.data)
class SigninView(APIView):
def post(self, request):
user = authenticate(**request.data)
if not user:
return Response(
{"error": "아이디 혹은 비밀번호가 올바르지 않습니다."}, status=400
)
res_data = UserSerializer(user).data
refresh = RefreshToken.for_user(user)
res_data["access_token"] = str(refresh.access_token)
res_data["refresh_token"] = str(refresh)
return Response(res_data)
class ProfileView(APIView):
permission_classes = [IsAuthenticated]
def get(self, request, username):
user = User.objects.get(username=username)
serializer = UserSerializer(user)
return Response(serializer.data)
오늘의 회고
내일 더 열심히 하자.
'매일 TIL' 카테고리의 다른 글
[내일배움캠프 13-4일] django 심화과제 (0) | 2024.09.19 |
---|---|
[내일배움캠프 12-5일] django 심화과제 (0) | 2024.09.13 |
[내일배움캠프 12-3일] django 심화과제 시작, 와이어프레임, ERD, API 명세서 (0) | 2024.09.11 |
[내일배움캠프 12-2일] django 개인과제 마무리, 트러블 슈팅(해결) (1) | 2024.09.10 |
[내일배움캠프 12-1일] django 개인과제, 트러블 슈팅(미해결) (0) | 2024.09.09 |