Django Errors(課題で遭遇したエラー)


エラー😨//westeargramの難題を解決する際に遭遇したエラーのブログ.
1. Method Not Allowed

特定のビューで特定のHTTPメソッドを呼び出すことが許可されていないか、無効なURLを呼び出していることを示します.URLを修正し、最初の値が空の場合、POST出力検証エラーの場合、エラーを返します.
2. TypeError : expected string or bytes-like object

抽出するリストが文字列タイプでない場合は、エラーが返されます.
正規表現で一致すると、タイプエラー(Type-Error:Expected String or bytes-like object)が発生します.エラーが発生したコードは次のとおりです.
users/validators.py
import re

# 이메일 validate
def validate_email(email):
    email_regex = r'^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
    return re.match(email_regex, email)

# 비밀번호 validate
def validate_password(password):

	password_regex = r'^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$'
    return re.match(password_regex, password)
users/views.py
import re
import json

from django.http  import JsonResponse
from django.views import View

from users.models import User
# validator.py에서 function 가져오기
from users.validators import validate_email, validate_password

class SignUpView(View):
    def post(self, request):
        try:
            data = json.loads(request.body)

            email        = data['email']
            password     = data['password']
            phone_number = data['phone_number']

            if not re.match(PASSWORD_VALIDATION, email):
                return JsonResponse({'Message' : 'Invalid Email'}, status = 400)
            
            if not re.match(PASSWORD_VALIDATION, password):
                return JsonResponse({'Message' : 'Invalid Password'}, status = 400)
            
            if User.objects.filter(email = email).exists():
                return JsonResponse({'Message' : 'Email Already Exist '}, status = 400)
確認済み.pyは、指定された電子メールをemail regexに一致させ、ユーザー/viewsに返信します.py
SignUpViewはまた、if not re.match(PASSWORD_VALIDATION, email):を使用して再検証を試みた.
だからブログの要求に従ってif not re.match(PASSWORD_VALIDATION, str(email)):をしましたが、間違いは消えませんでした...
このため、次のコードで重複する機能を使用しないようにすることで、エラーが解決されます.
class SignUpView(View):
    def post(self, request):
        try:
            data = json.loads(request.body)

            email        = data['email']
            password     = data['password']
            phone_number = data['phone_number']

            # 'if not re.match(PASSWORD_VALIDATION, password):'은 중복된 기능을 사용하며 에러 유발
            if not validate_email(email):
                return JsonResponse({'Message' : 'Invalid Email'}, status = 400)
            
            if not validate_password(password):
                return JsonResponse({'Message' : 'Invalid Password'}, status = 400)
            
            if User.objects.filter(email = email).exists():
                return JsonResponse({'Message' : 'Email Already Exist '}, status = 400)
3. django.db.utils.DataError

django.db.utils.DataError:Data long for column"phone number"エラー...
from django.db import models

class User(models.Model):
    first_name   = models.CharField(max_length=50)
    last_name    = models.CharField(max_length=50, null=True)
    email        = models.EmailField(max_length=50, unique=True)
    password     = models.CharField(max_length=100)
    phone_number = models.CharField(max_length=15)

    .
    .
    .
携帯電話番号は一般的に010-0000-0000の形式で、総長さは数字11桁+ハイフン2桁の計13桁なので、max_length=15にpropertyを指定するとエラーになります.
max lengthは、最大長(文字数)byteとして定義されます.(UTF-8のハングルは3バイト)max lengthで指定したバイトを超えたことによるエラー.したがって、より大きなmax lengthを指定します.
from django.db import models

class User(models.Model):
    first_name   = models.CharField(max_length=50)
    last_name    = models.CharField(max_length=50, null=True)
    email        = models.EmailField(max_length=50, unique=True)
    password     = models.CharField(max_length=100)
    phone_number = models.CharField(max_length=20)
    .
    .
Django - django.db.utils.ProgrammingError:
携帯電話番号を増やしたmax lengthは、直接Viewに移動してPOSTを行い、Django - django.db.utils.ProgrammingError: relation "폴더" does not existというエラーが発生した.migrateはありませんので、migrateを実行してください.
モデルを変更した場合はmakemigrations&migrateを忘れないでください.
400エラー

Bad Request: /users/signup "POST /users/signup HTTP/1.1" 400 28の間違いだと言いましたが...
私のエラーは、自分で作成した正規表現に無効な値を入力したことによるエラーです.有効な正規表現value...!