21.3.8


Westagram with Django 5日目


メンターのコメントを一つ一つ修正し、コードの整理と認証時間を再復習+Mission 7 Follow

1.コメント内容


  • 可読性のための論理分割2回のフィードバック

  • (会員入学試験)パスワードは重複できます.高炉論理からコードを減算

  • 良い点:暗号化プロセス(しかし、まだ理解していないところがたくさんあるので、他の人のコードを見ると、私とは違うものがたくさんあります.私は理解していません.勉強を続けます.)

  • createの後はsave()は必要ありません.

  • get()で電子メールをインポートする方法を使用して、取得する必要がある例外を検索します.
  • try:
        user = User.objects.get(email=data['email'])
                except User.DoesNotExist:
                    return JsonResponse({"message":"USER_DOES_NOT_EXIST"}, status=400)
  • djangoメニューにもあるそうで、プレイヤーの有無を判別する例外処理です.知っていれば、ドアを使わなくても十分濾過できるはずです.
  • jwt生成ロジックを完了して使用する手順:
  •             if bcrypt.checkpw(data['password'].encode('utf-8'), user.password.encode('utf-8')):
                    token = jwt.encode({'email' : data['email']}, SECRET_KEY, algorithm="HS256")
                    return JsonResponse({'token' : token, "message":"SUCCESS"}, status=200)
    
    コインを作成して発送する過程を確認する必要があるかもしれません.でもこれは正解じゃないみたいだから考えてみよう

  • 不要なelse文の削除:戻り値をifに調整するときのインデント

  • その他の変更:
    ハッシュ中は最後に復号せずに終了したが,後でデータベースをプッシュして再ログインするとログインに失敗する現象が見られた.必ず復号で閉じます.
  • 2. Mission7

  • 現在の方向:アプリケーションは作成されず、AccountアプリケーションでManytomayを使用してモデリングされます.
  • 実行中に多くのエラーが発生し、私の弱点
  • を発見しました.
    結果を
  • Shellで確認できません.
  • 1:マルチモデルでも口頭で説明できません.違いを作るのはもちろん難しいです.
  • だから実行:

  • 長いハウジングの使用方法を再熟知します(データベースが消耗した後に会員帳のアウトドアを作成する以外は、ハウジングで作成されています).

  • 複数:すべての関連資料を再検索
    ブログの整理:セルフリファレンス.複数:複数のコンテンツを整理
    ブログを整理する:友達同士は自動的に友達(True)で、相手に注目しないわけにはいかない.
    ドラム公式ドキュメント部分

  • ヒント:Self Reference Model
  • の場合、1つのテーブル内の資料(すなわち、ユーザ)のコンテンツ間で相互に参照する必要がある場合.テーブルを書くので、自分を参照するためselfを行う必要がありますが、自分が参照しているモデルを検索してアクセスする必要があります.
  • をヒントとして得られたモデリング:このモデリングの結果も以前のように二重ではない.正しくモデリングされています.
  • from django.db import models
    
    class User(models.Model):
        email    = models.EmailField(max_length=50, unique=True)
        password = models.CharField(max_length=100)
        relation = models.ManyToManyField('self', through='Follow', symmetrical=False)
        # follow는 유저간 관계라서 변수명 지음
        # self : 스스로 참조한다.
        # through : Follow 클래스로
        '''ymmetrical=False / 기본은 True, 친구로 예를 들면 두 참조가 친구면 서로 친구. 근데 False 값을 써줘야 하는 이유는 기본적으로 인스타는 맞팔이 아니기 때문. 누군가 팔로우를 해도 누군가는 팔로 안 할 수도 있으니까.'''
    
        class Meta:
            db_table = "users"
            
     
    class Follow(models.Model):
        following = models.ForeignKey(User, on_delete = models.SET_NULL, null=True, related_name = "following")
        follower  = models.ForeignKey(User, on_delete = models.SET_NULL, null=True, related_name = "follower")
        # 다음은 팔로잉, 팔로어를 외래키로 모델링. 값은 NULL로 하고 관계된 이름을 정해준다.
        # 여기서 이름이 정확히 정해지지 않으면 참조가 원활히 이뤄지지 않는다.
        class Meta:
            db_table = "follows"
  • 以降が正常かどうかを確認するためのロングハウジング
  • >>> from account.models import Follow
    >>> Follow.objects.create(following=u1, follower=u2)
    <Follow: Follow object (1)>
    # 정확히 객체가 하나 생성되었다.
  • views.py
    JangGoShellを使用すると、ビューの作成が容易になります.
    views.py
  • class FollowView(View):
        def post(self, request):
                data      = json.loads(request.body)
                following = User.objects.get(email=data['following'])
                follower = User.objects.get(email=data['follower'])
                # 항상 데이터를 어디서 가져와야하는지 헷갈렸는데 장고쉘을 해본 덕에 금방 왜 그렇게 되는지 이해가 되었다.
                if following == follower:
                    return JsonResponse({"message":"SAME_PERSON!"})
                    # 자신이 자신을 팔로하지 못 하므로 예외를 둔다.
                    follow = Follow.objects.create(
                        following = following,
                        follower  = follower
                )
                return JsonResponse({"message": "SUCCESS"}, status=200)
    このようにして、微信タスク7の注目機能が完成した.長い間悩んでいましたが、特別なことはなかったとも言えますが、私にとってはとても嬉しい一章でした.