Westagram #4


投稿の登録と公開


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 appのmodelsファイルからAccountクラスをインポートします.
登録投稿のプレイヤーuser
投稿登録時間created_at.
記事contentimage_urlプロパティが生成され、パブリッシュする画像のurlアドレスが含まれます.
ForeignKeyを使用してAccountクラスに接続し、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='[email protected]' 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値である.