21.3.4


Westagram with Django 2日目


今日のお仕事:Mission 2~3


Mission 1:会員登録サイト


1.ユーザー表の作成


(コード)
  • models.py
  • from django.db import models
    
    class User(models.Model):
        email    = models.EmailField(max_length=50)
        password = models.CharField(max_length=100)
        
        class Meta:
            db_table = "users"
  • ビットのスターバックスと同じように電子メール、パスワードを持つレベルを作成します.この場合、EメールはEmailfieldを使用します.
  • 重要な注意事項:変数名は正確/テーブル名とクラス名は同じですが、複数のタイプが必要です:
  • 2. views.pyの作成


    (コード)
    import json
    
    from django.views import View
    from django.http  import JsonResponse
    
    from .models import User
    
    class SignupView(View):
        def post(self, request):
            data = json.loads(request.body)
            try:
                user = User.objects.filter(email=data['email'],password=data['password'])
                if User.objects.filter(email=data['email']).exists():
                    return JsonResponse({"message": "EMAIL_ERROR"}, status=400)
                if User.objects.filter(password=data['password']).exists():
                    return JsonResponse({"message": "PASSOWRD_ERROR"}, status=400)
                if '@' in data['email'] and '.' in data['email'] and len(data['password']) >= 8:
                    user     = User.objects.create(
                    email    = data['email'],
                    password = data['password']
                )
                    return JsonResponse({"message": "SUCCESS"}, status=200)
            except KeyError:
                return JsonResponse({"message": "KEY_ERROR"}, status=400)

  • その他の内容は、ユーザーの電子メール、パスワードのフォーマットが正しいかどうかを確認した後、ifで記入します.

  • 紛らわしい部分:ユーザーが登録されているユーザーに対して、ユーザーがいるかどうかを区別しますか?->電子メールとフィルタを別々に処理する場合は解決します.
    時間があれば、正規表現@を使うのがベストです.分離を試みる

  • コード修正:キーエラーの理解が不足しているため、次のログインビューと同様に修正が類似しています.
  • (元のコード)
        def post(self, request):
            data = json.loads(request.body)
            if User.objects.filter(email=data['email']).exists():
                return JsonResponse({"message": "EMAIL_ERROR"}, status=400)
            if User.objects.filter(password=data['password']).exists():
                return JsonResponse({"message": "PASSOWRD_ERROR"}, status=400)
            if '@' in data['email'] and '.' in data['email'] and len(data['password']) >= 8:
                user     = User.objects.create(
                email    = data['email'],
                password = data['password']
            )
                return JsonResponse({"message": "SUCCESS"}, status=200)
            else:
                return JsonResponse({"message": "KEY_ERROR"}, status=400)
    
    キー溝、すなわちディック郡形のキー溝形状は全く考慮されない.

    3.ログインビューの作成


    (コード)
    class LoginView(View):
        def post(self, request):
            data = json.loads(request.body)
            try:
                user = User.objects.filter(email=data['email'],password=data['password'])
                if User.objects.all().filter(email=data['email'], password=data['password']).exists() == True:
                    return JsonResponse({"message":"SUCCESS"}, status=200)
                else:
                    return JsonResponse({"message":"INVALID_USER"}, status=401)
            except KeyError:
                return JsonResponse({"message":"KEY_ERROR"}, status=400)
    コア:try/除外コード

  • どうしてPOSTですか.単純getはユーザー情報を漏らす.getは与えられたpostで受け取ったのではありませんログインの場合、これは特殊な例外とみなされ、postリクエストとして受け入れられます.

  • try/例外の除外:

  • 使用理由:一度受け取ったデータを再送信するには、まず最初の条件KEY ERRORを見ます.クエリーを一時的に単純なディック形式と見なす場合、email=~がこのようにおとなしく到来するとは思わないで、要求の到来を防ぐためにemailkdjfkjdのようなキー自体、すなわちフォーム自体を破壊し、例外処理を行うべきである.

  • コース:
    1)try,まず構造をつかむ
    2)userという変数->objectsを設定して、Userに格納されている値を取得します.フィルタの使用フィルタから電子メールとパスワードを取得し、条件を満たす
    3)条件文:情報全体がフィルタ値に一致している場合は、パスワードエラーなどの成功/不一致の値を返します.
    4)最後のKeyError:実際の鍵に対してエラーが発生した.ここで、車に戻るのは彼に対する返事だと思います.
  • これは全体的に理解しにくい論理であり、もっと理解しなければならない.説明するときもこれが正しいかどうか分からない.同時期の人とも話しましたが、全体的には少し歪んだ論理です.しかし、どこから間違っているのか分からないので、コードコメント後に方向を見つけて修正すべきだと思います.まず、結果値に異常はありません.

    4.その他のURL。pyの指定


    (項目)
    from django.urls import path, include
    
    urlpatterns = [
        path('account/', include('account.urls'))
    
    ]
    (アプリケーション)
    from django.urls import path
    from .views      import *
    
    urlpatterns = [
        path('user', UserView.as_view()),
        path('login', LoginView.as_view()),    
    ]
  • urls.pyスラッシュの位置を確認する
    (urls.w002) your url pattern '/user' has a route beginning with a '/'. remove this slash as it is unnecessary. if this pattern is targeted in an include(), ensure the include() pattern has a trailing '/'. エラー/上の「」を使用します.
  • 5.もっと勉強するところ

  • 前進try/退出時参考熟知
  • 熟知
  • Git
  • 中間難記楽透(405,/...覚えておいてください)
  • コメントブログ


    /エラー
    以上のコード先輩のブログの内容を参考に