본문 바로가기
부트캠프TIL, WIL/AI웹개발(스파르타코딩클럽)

[AI웹개발][54일차TIL] 파이썬, Django FBV, DRF 복습 4일차

by 우지uz 2023. 5. 20.

https://github.com/ksw406020230309/djangoLecture_TEST01

 

GitHub - ksw406020230309/djangoLecture_TEST01

Contribute to ksw406020230309/djangoLecture_TEST01 development by creating an account on GitHub.

github.com

 

 

user앱에 views.py

from django.shortcuts import render, redirect
from django.contrib.auth import get_user_model #사용자가 있는지 검사하는 함수
from user.models import UserModel
from django.contrib import auth
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required



def sign_up_view(request):
    if request.method == 'GET':
        user = request.user.is_authenticated # 로그인 된 사용자가 요청하는지 검사
        if user: # 로그인이 되어있다면
            return redirect('/')
        else: # 로그인이 되어있지 않다면
            return render(request, 'user/signup.html')
    elif request.method == 'POST':
        username = request.POST.get('username', None)
        password = request.POST.get('password', None)
        password2 = request.POST.get('password2', None)
        bio = request.POST.get('bio', None)

        if password != password2:
            return render(request, 'user/signup.html')
        else:
            exist_user = get_user_model().objects.filter(username=username)

            if exist_user:
                return render(request, 'user/signup.html') # 사용자가 존재하기 때문에 사용자를 저장하지 않고 회원가입 페이지를 다시 띄움
            else:
                UserModel.objects.create_user(username=username, password=password, bio=bio)
                return redirect('/sign-in') # 회원가입이 완료되었으므로 로그인 페이지로 이동
# 회원 가입시, 이미 존재하는 유저이다 > 회원 가입 할 필요 없음
# 이미 존하는 유저가 아니다 > 회원 가입 시켜야함


def sign_in_view(request):
    if request.method == 'POST':
        username = request.POST.get('username', None)
        password = request.POST.get('password', None)

        me = auth.authenticate(request, username=username, password=password)  # 사용자 불러오기
        if me is not None:  # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
            auth.login(request, me)
            return redirect('home')
        else:
            return redirect('sign-in')  # 로그인 실패
    elif request.method == 'GET':
        user = request.user.is_authenticated  # 사용자가 로그인 되어 있는지 검사
        if user:  # 로그인이 되어 있다면
            return redirect('home')
        else:  # 로그인이 되어 있지 않다면
            return render(request, 'user/signin.html')



@login_required
def logout(request):
    auth.logout(request) # 인증 되어있는 정보를 없애기
    return redirect('home')

 

tweet 앱에 views.py

from django.shortcuts import render, redirect
from .models import TweetModel, TweetComment # 글쓰기 모델 -> 가장 윗부분에 적어주세요!
from django.contrib.auth.decorators import login_required


# Create your views here.
def home(request):
    user = request.user.is_authenticated  # 사용자가 인증을 받았는지 (로그인이 되어있는지)
    if user:
        return redirect('tweet')
    else:
        return redirect('sign-in')


def tweet(request):
    if request.method == 'GET':  # 요청하는 방식이 GET 방식인지 확인하기
        user = request.user.is_authenticated  # 사용자가 로그인이 되어 있는지 확인하기
        if user:  # 로그인 한 사용자라면3
            all_tweet = TweetModel.objects.all().order_by('-created_at')
            return render(request, 'tweet/home.html', {'tweet': all_tweet})
        else:  # 로그인이 되어 있지 않다면
            return redirect('sign-in')
    elif request.method == 'POST':  # 요청 방식이 POST 일때
        user = request.user  # 현재 로그인 한 사용자를 불러오기
        my_tweet = TweetModel()  # 글쓰기 모델 가져오기
        my_tweet.author = user  # 모델에 사용자 저장
        my_tweet.content = request.POST.get('my-content','')  # 모델에 글 저장
        my_tweet.save()
        return redirect('tweet')

def delete_tweet(request, id):
    my_tweet = TweetModel.objects.get(id=id)
    my_tweet.delete()
    return redirect('tweet')

@login_required
def detail_tweet(request, id):
    my_tweet = TweetModel.objects.get(id=id)
    tweet_comment = TweetComment.objects.filter(tweet_id=id).order_by('-created_at')
    return render(request,'tweet/tweet_detail.html',{'tweet':my_tweet,'comment':tweet_comment})


@login_required
def write_comment(request, id):
    if request.method == 'POST':
        comment = request.POST.get("comment","")
        current_tweet = TweetModel.objects.get(id=id)

        TC = TweetComment()
        TC.comment = comment
        TC.author = request.user
        TC.tweet = current_tweet
        TC.save()

        return redirect('/tweet/'+str(id))


@login_required
def delete_comment(request, id):
    comment = TweetComment.objects.get(id=id)
    current_tweet = comment.tweet.id
    comment.delete()
    return redirect('/tweet/'+str(current_tweet))

하나하나 어떤 코드들이 다른지, 천천히 읽어보면서 

모델, 세팅, URL, 뷰함수, 템플릿을 연결하는 것들을
해보았고 

연결할 때 함수들의 인자들과 기본 방법들에 대해서 공부를 했구요

장고와 DRF의 차이점과 

 

시리얼라이저, 유효성검사, 사용자 인증, 권한 등

중요한 내용들에 대해 곱씹어보고 

팀원들과 대화도 많이 해보았고 
다른 팀 원분들과도 이야기 하고 

같이 에러들을 해결하면서 
많은 것들을 알아 가는 시간이었습니다. 

 

에러를 해결하고, 배운 내용들을 바탕으로

확실한 내용이 맞는지 튜터님에게 질문하면서
개념에 대한 확신을 가졌던것 같아요. 

 

캠프에 속해있으면서, 팀원들과 에러를 같이 해결하고 
함께 공부하면서 서로 객관적으로 이해할 수 있도록하고

튜터님들과 토론하면서, 내가 이해하고 있는 게 맞는지 
확인하는  과정들의 소중함을 더더욱 깨달았던 하루 입니다!

 

오늘 하루도 수고하셨습니다.