First Toy Proejct[Westagram][20210827]


  Wecodeに入って3週間Pythonの基本文法&Djangoの機能を学び、やっと簡単なToyProjectを始めました.今回はこれについてのブログを書きたいと思います.
<ディレクトリ>
1.モデリング
2.会員入金機能の実現
3.終了...

1.モデリング


  モデリングを行う前に、プロジェクトの基本設定を設定する必要があります.これについては、8月13日に作成した初期設定に関するブログを参考にしてください.
今回のプロジェクトの進行は各機能ごとに個別のブランチを作成して行い、Git HubでPush&Pullを使用します.
作成
  • ユーザーブランチ
  • $ git checkout main # 브랜치 생성은 꼭 main에서 해야 한다.
    $ git branch 'branch 이름'
    $ git checkout 'branch 이름'
    作成
  • ユーザアプリケーション
  • $ python manage.py startapp users # manage.py가 위치한 폴더에서 실행해야 함.
  • ユーザテーブル
  • を作成する
    本Toyプロジェクトでは簡単な登録と登録機能のみを実施しますので、以下の情報だけで機能を実現できます.
  • Eメール
  • パスワード
  • 連絡先(移動通信)
  • アドレス
  • ユーザー・アプリケーションのモデル.pyに入力したコードは以下の通りです.
    $ from phonenumber_field.modelfields import PhoneNumberField
    
    $ from django.db import models
    
    $ class User(models.Model):
         name         = models.CharField(max_length=50)
         email        = models.EmailField(max_length=50)
         password     = models.CharField(max_length=500)
         phone_number = PhoneNumberField(unique = True)
         address      = models.TextField()
    
         class Meta:
             db_table = 'users'
    さらに詳しい説明を加えると、電話番号と電子メールは専用の現場を使用しています.
    上記モデリングを行い、移行してデータを入力する場合、Tableの出力値は以下のようになります.

    上述したように、今回の「Toy Project」は、機能ごとにブランチを作成することによって行われるので、Git hubでプッシュおよびプッシュ要求を行う必要がある.
    # git push
    
    $ git add .
    $ git commit -m "Add : message"
    $ git push origin 'branch 이름'
    その後Git HubにアクセスしてPull Requestを行います.
    Pull Requestを行うのは、モデリングがサブブランチで行われるため、メインブランチには存在しません.したがって,モデリングしたコンテンツをmain branchに適用するためにはPRが必要である.
    PRする方法は以下の通りです.

    Git Hubを私がプッシュしたRepositoryに接続し、上の画像のボタンをクリックして接続します.画面に接続すると、私が最近押した内容を見てPRすることができます.
    その後、Repository管理者がPRを承認した場合、Pullを実行できます.

    2.会員入金機能の実現


      今回行われたトイプロジェクトはDjangoがサポートする機能ではなく、Jsonタイプのデータを直接入力することで会員加入機能を実現.
    作成したコードは以下の通りです.
    import json
    import re
    
    from django.views import View
    from django.http import JsonResponse
    
    from users.models import User
    
    class UserView(View):
        def post(self, request):
            data           = json.loads(request.body)
            email_regex    = re.compile(r'^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')
            password_regex = re.compile(r'^(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[!@#$%^*+=-]).{8,}$')
    
            try:
                name         = data['name']
                email        = data['email']
                password     = data['password']
                phone_number = data['phone_number'] 
                address      = data['address']
    
                if User.objects.filter(email = data['email']).exists():
                    return JsonResponse({"message" : "EXIST USER"}, status = 400)
                elif not email_regex.match(data['email']):
                    return JsonResponse({"message" : "INVALID_EMAIL"}, status = 400)
                elif not password_regex.match(data['password']):
                    return JsonResponse({"message" : "INVALID_PASSWORD"}, status = 400)
                
                User.objects.create(
                    name         = data['name'],
                    email        = data['email'], 
                    password     = data['password'],
                    phone_number = data['phone_number'], 
                    address      = data['address'], 
                )
                return JsonResponse({"message" : "SUCCESS"}, status = 201)
            except KeyError:
                return JsonResponse({"message" : "KEY_ERROR"}, status = 400)
    まず、実装する機能は次のとおりです.
  • の電子メールまたはパスワードが入力されていない場合、{"メール":"KEY ERROR"}は、ステータスコード400のメール
  • に戻る.
  • Eメールアドレスは「わあ」です.含める必要があります.(一般式を使用)そうでない場合{"message":"INVALID EMAIL"}status=は400メッセージ
  • を返します.
  • パスワードは、8ビット以上、アルファベット、数字、特殊文字の複合でなければなりません.(一般式を使用){"message":"INVALID PASEWORD"}status=400はメッセージ
  • を返します.
    入力されたメールが
  • を繰り返すと、{"メール":"EXIST USER"}status=400が返すメール
  • Djangoの組み込み関数Postメソッドを使用して、入力したデータをJson形式で受信します.(次のコードを参照)
    data           = json.loads(request.body)
    また,電子メールとパスワードの条件を満たすために正規表現を用い,正規表現を以下に示す.
    email_regex    = re.compile(r'^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')
    password_regex = re.compile(r'^(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[!@#$%^*+=-]).{8,}$')
    正規式の構成がどのような理由で構成されているかについての説明は、リンクに登録して確認することができる.
    上記の条件を満たすためにif&elif文を使用しましたが、elif文でなければif文をすべて使用し、論理的にあまり差がないことを確認しました.もちろん、コンピュータシステムでは、時間の複雑さはやや異なるかもしれませんが、自分で計算したことはありません.
            try:
                name         = data['name']
                email        = data['email']
                password     = data['password']
                phone_number = data['phone_number'] 
                address      = data['address']
    
                if User.objects.filter(email = data['email']).exists():
                    return JsonResponse({"message" : "EXIST USER"}, status = 400)
                elif not email_regex.match(data['email']):
                    return JsonResponse({"message" : "INVALID_EMAIL"}, status = 400)
                elif not password_regex.match(data['password']):
                    return JsonResponse({"message" : "INVALID_PASSWORD"}, status = 400)
                
                User.objects.create(
                    name         = data['name'],
                    email        = data['email'], 
                    password     = data['password'],
                    phone_number = data['phone_number'], 
                    address      = data['address'], 
                )
                return JsonResponse({"message" : "SUCCESS"}, status = 201)
            except KeyError:
                return JsonResponse({"message" : "KEY_ERROR"}, status = 400)
    端末がサーバを起動した後、Postメソッドでデータを入力すると、入力されたデータが以下のように表示されます.

    3.終了..。


      実際、これは最初に作成しようとした機能であり、Toy Projectでもあるので、異常を処理するのにあまり精力がありません.上のコードで見たようにkeyerrorだけが捉えられており,後で行うプロジェクトでは,様々な例外を捉えるために多くのことを考慮する必要があるかもしれない.
      最近は「開発床」というユーチューブを見て、クローンコードを行う過程で単純に多くの機能を実現するのは本当にメリットのないビデオを見ました.1つの機能を実現する上で、開発者の悩みが溶け込むかどうかが重要です.本人が動画を見てよく考えた結果、開発を職業とすれば、これからは多くの挑戦に直面するだろうが、他人のやり方でやるのはあまり意味がないようだ.したがって、将来のクローンプロジェクトで多くの機能が実現されなくても、場合によっては問題が発生しないように、コードの作成に努力する必要があります.