Westagram #4

chaerin·2021년 2월 10일
0

Westagram

목록 보기
4/5

게시물 등록 및 표출

posting app

앞서 진행한 회원가입과 로그인 절차에서는 user라는 앱을 생성하여 사용하였다. 하지만 django에서는 주로 다루는 데이터의 종류가 달라질 때 앱을 분리한다고 한다.

게시물은 사용자 데이터와는 성질이 다른 데이터이므로 앱을 분리해준다.



게시물 모델 생성

from django.db    import models

from user.models  import Account


class Post(models.Model):
  user       = models.ForeignKey(Account, on_delete=models.CASCADE, null=True)
  created_at = models.TimeField(auto_now_add = True, null=True)
  content    = models.TextField()
  image_url  = models.URLField()

  class Meta:
    db_table = 'posts'

게시물의 유저와 서비스에 가입된 사람을 Foreign Key를 이용하여 연결시켜 주기 위해

user앱의 models 파일에서 Account 클래스를 import 해왔다.


게시물을 등록하는 유저 user,
게시물이 등록되는 시각 created_at,
게시물에 대한 글 content,
게시물이 될 이미지의 url 주소를 담는 image_url 속성을 생성해주었다.

ForeignKey 를 이용해서 Account 클래스와 연결 해주었고 이 때 외래키가 바라보는 값이 삭제될때 외래키를 포함하는 모델 인스턴스(row)도 삭제되도록 하는 on_delete=models.CASCADE를 사용하였다.


게시물 뷰 작성

게시물 등록 - post 메소드 사용

class PostView(View):
  def post(self, request):
    data = json.loads(request.body)

    try:
      if Account.objects.filter(email = data['email']).exists():
      # 요청받은 이메일주소가 존재하는지 확인
        user = Account.objects.get(email = data['email'])
        # 존재한다면 해당 이메일 주소(계정)를 가진 사용자 할당

        Post(
            user      = user,			# user 속성으로 요청받은 사용자의 정보가 연결
            content   = data['content'],
            image_url = data['image_url'],
            ).save()

        return JsonResponse({'MESSAGE': 'SUCCESS'}, status=200)

      return JsonResponse({'MESSAGE': 'INVALID_USER'}, status=401)

    except Exception as e:
  return JsonResponse({'MESSAGE' : f'NO {e}'}, status = 400)

게시물 표출 - get 메소드 사용

def get(self, request):
  post_list = list(Post.objects.values())	# 등록된 모든 게시물을 불러온다.

  return JsonResponse({'post_list': post_list}, status=200)

user앱의 Account import 잊지 말기


url 작성

  • westagram.urls
  • posting.urls

게시물 등록하고 불러오기

게시물 등록
>>> http POST 127.0.0.1:8000/posting email='cat33@cat.com' content='고양 이' image_url='https://topclass.chosun.com/news_img/1807/1807_008_1.jpg'

게시물 표출
>>> http GET 127.0.0.1:8000/posting

게시물을 불러오면 아래와 같이 게시물에 대한 정보를 확인할 수 있다.

user_id는 게시물을 등록할 때 입력한 이메일주소를 가진 사용자 고유의 id 값이다.

0개의 댓글