Westagram-いいですね!

4597 ワード

習慣性がよい
今、このポスターが好きな人を見せて、私のことが好きな人が誰なのか見てみましょう.
モデルを作成するときに、ブランチポイントとしてパブリッシュされるappとlikeを行うapp、およびコメントを担当するappを配布できます.
これは学習の過程で、投稿の上ですべて行います.:)
まず、賛に関するモデルを作成します.models.pyでは次のコードが行われています.
class Like(models.Model):
    like_status = models.IntegerField(default=0)
    post = models.ForeignKey('Post', on_delete=models.CASCADE)
    user = models.ForeignKey('users.User', on_delete=models.CASCADE)

    class Meta:
        db_table = 'likes'
この投稿をクリックして賛をクリックしたユーザーに転送して接続し、like statusという賛ステータスバーを作成しました.
このバーは、ユーザーが直接「いいね」をクリックしない場合、「いいね」ステータスが空になるため、デフォルト値で0が与えられます.
あ0は空Heart 1はいっぱいのHeartを表すために行われています
今はビューpyで「いいね」をクリックするビューを作成します.
class LikeView(View):

    @login_decorator
    def post(self, request):
        try:
            data        = json.loads(request.body)
            like_status = data['like_status']
            post_id     = data['post']
            user        = request.user
            post        = Post.objects.get(id = post_id)

            if like_status == 1 :               
                if not Like.objects.filter(post = post, user = user).exists():
                    Like.objects.create(
                        like_status = like_status,
                        post        = post,
                        user        = user
                    )
                
                else:
                    like             = Like.objects.filter(post = post, user= user)[0]
                    like.like_status = 1
                    like.save()
            
            if like_status == 0 :
                if Like.objects.filter(post = post, user = user).exists():
                    like 			 = Like.objects.filter(post = post, user= user)[0]
                    like.like_status = 0
                    like.save()

				else:
                    return JsonResponse({"message" : "INVALID_LIKE"}, status = 400)

            return JsonResponse({"message" : "SUCCESS"}, status = 201)

        except Post.DoesNotExist:
            return JsonResponse({"message" : "INVALID_POST"}, status = 400)

        except KeyError:
            return JsonResponse({"message" : "KEY_ERROR"}, status = 400)
私はいいねをするために承認が必要な状態なので、解説者を利用して承認してください.
そして私がほめたいpostのidと私のuser idを区別します.
そして,いいね1を押してリクエストに送信されると,2つのケースの分岐が生じる.
この投稿で初めて「いいね」をクリックしたときと、以前「いいね」をクリックしてから好きではないとき.
初めて「いいね」を押すと、データを保存するためにlikeテーブルに保存されます.
前にクリックしたレコードがある場合は、行のlike statusステータスを1に変更して保存します.前に「いいね」を解けば、like statusは0になるからです.
なぜゼロなのか、下のifゲートを直接見ればわかります.
requestが0の場合、投稿の好みがキャンセルされます.もしそうなら、すでに存在する投稿には1が格納され、0に変換されるべきです.これらのプロセスを上のコードのように動作させます.
コードにユーザが操作しようとする点賛状態が保存されたオブジェクトをロードするためにLike.objects.filter(post = post, user= user)[0]のように処理を行い、[0]を指定したのは、その列が無条件に1つしか現れないためであり、filterは[0]をクエリーセットとして返さざるを得ないからである.もし後でもっと合理的なコードがあれば、私は修正します.
では、正常に機能するかどうか見てみましょう.


データベースも良好な状態にあることを確認します.
しかし、賛辞表が実施されると、それに応じた投稿にも賛辞数と賛辞数をクリックする人が現れた.
そこでpostingviewについて以下のように修正しました.
@login_decorator
    def get(self, request):
        posts   = Post.objects.all()
        results = []

        for post in posts:
            fix_created_at = post.created_at.strftime("%Y-%m-%d %H")+"시"
            likes = post.like_set.all()
            like_count = 0
            like_user = []
           
            for like in likes:
                if like.like_status == 1:
                    like_count += 1
                    like_user.append(like.user.email)

            results.append(
                {
                    "poster"     : post.user.first_name,
                    "title"      : post.posted_title,
                    "content"    : post.posted_content,
                    "image_url"  : post.posted_image.url,   
                    "created_at" : fix_created_at,
                    "like_count" : like_count,
                    "like_user"  : like_user
                }
            )

        return JsonResponse({"posts" : results}, status = 200)     
異なる点はpostの逆参照グループがliketable情報をもたらし,like statusが1である場合のみ計算を行い,そのユーザのemailを中に入れて示すことである.それは下のように出てきます.

いい仕事はこれで终わります.:)