[ TIL 05/30 ] Django UserModel 및 댓글

JoonQpa·2022년 5월 30일
0
post-thumbnail

원어민에게 a waterable cat 우기기용 그림

  • 🔍UserModel 업그레이드

  • 🔍댓글 기능 구현 로직

📌UserModel

  • UserModel 업그레이드
# user.models.py
from django.db import models
from django.contrib.auth.models import AbstractUser


# Create your models here.
class UserModel(AbstractUser):
# UserModel이란 클래스를 만들껀데, 장고에서 미리 만든 AbstractUser클래스의 기능들을 그대로 가져와서 적용하겠다.

    class Meta:
        db_table = "my_user" # 테이블 이름

    bio = models.TextField(max_length=500, blank=True)
    # 장고에서 제공하는 기본 User모델에서 bio기능을 추가해주겠다.
    
#settings.py
AUTH_USER_MODEL = 'user.UserModel'
# 장고에게 앞으로 기본인증과정을 user앱에 작성한 UserModel로 사용하겠다 라는 의미
python manage.py makemigrations 
python manage.py migrate
#우리가 만든 Model을 데이터베이스에 추가하고 적용시키겠다.
  • 회원가입 기능 수정
# user/views.py
from django.contrib.auth import get_user_model #사용자가 있는지 검사하는 함수

def sign_up_view(request):
    if request.method == 'GET':
        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') # 회원가입이 완료되었으므로 로그인 페이지로 이동

📌comment 기능 구현

⭐로직

  • 댓글 텍스트가 id=comment값을 가지고, submit형태로 데이터를 보낸다.
  • 해당 데이터를 /tweet/comment/{{ tweet.id }} url 주소로 POST요청을 보낸다.

# tweet.urls.py

urlpatterns = [
    path('', views.home, name='home'),
    path('tweet/', views.tweet, name='tweet'),
    path('tweet/delete/<int:id>', views.delete_tweet, name='delete-tweet'),

    path('tweet/<int:id>',views.detail_tweet,name='detail-tweet'),
    path('tweet/comment/<int:id>',views.write_comment, name='write-comment'),
    # action='/tweet/comment{{ tweet.id }} 를 받는 url
    path('tweet/comment/delete/<int:id>',views.delete_comment, name='delete-comment'),
]
  • html에서 submit으로 받은 데이터를 action과 일치하는 url로 받는다.
  • views.write_comment 함수를 적용시킴

@login_required
def write_comment(request, id):
    if request.method == 'POST': # POST요청을 받을시
        comment = request.POST.get('comment','') # html의 comment id로 보내진 데이터를 comment라고 선언
        current_tweet = TweetModel.objects.get(id=id) # 요청받은 id와 일치하는 게시글을 current_tweet라고 선언

        TC = TweetComment() # TC함수에 TweetComment 클래스 적용
        TC.comment = comment # 위에서 선언한 comment함수를 TC.comment로 
        TC.author = request.user 
        TC.tweet = current_tweet
        TC.save() # 저장

        return redirect('/tweet/'+str(id)) # 해당 게시글로 이동
  • 데이터를 받아서 TweetComment모델의 데이터베이스에 저장하는 과정

하루하루 새로운 것들을 빠른시간내에 배우다보니, 만족할만한 수준의 로직 이해도를 가지기 어려워서 아쉽다는 생각이 많이 들었다. 따로 로직부분에 대해서 중점적으로 공부하면서 자신감을 가질 수 있을 정도로 이해도를 가지기 위해서 공부할 필요성을 느꼈다.

profile
Intuition factory: from noob to pro

2개의 댓글

comment-user-thumbnail
2022년 5월 31일

우리팀 에이스 준헌님 화이팅입니다 👏👏👏👏👏

1개의 답글