Wecode|Django登録機能の実装
django登録機能の実装
質問する
リポジトリプロジェクトの初期インストール
まずはDjangoプロジェクトのために前に習った初期設定をすればいいです
장고 프로젝트 초기세팅 & 가상환경 설정
Djangoプロジェクト初期設定 CORS
いくつかの追加情報があります.CORS
インストールプラグインpip install django-cors-headers
ALLOWED_HOSTS 추가
# settings.py
ALLOWED_HOSTS = ['*']
別のコンピュータが私のサーバーに接続しようとしています.無差別接続を防止するためにALLED HOSTSを修正し,特定のIPアドレスを持つ接続のみを許可した.通常は、許可したいIPアドレスのみを入力しますが、プロジェクトの実行時に複数のIPアドレスを許可する必要があるため、*はこれらのアドレスをすべて許可します.INSTALLED_APPS에 corsheaders 추가
# settings.py
INSTALLED_APPS = [
#'django.contrib.admin',
#'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders',
]
フロントエンドと通信する場合は、別のポートに接続してみます.INSTALLED APPSでは、既存の設定の下にシースを追加して、この操作を許可します.middleware 추가
# settings.py
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
]
settings.py 제일 아래 다음 내용 추가
# settings.py
##CORS
CORS_ORIGIN_ALLOW_ALL=True
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
)
CORS_ALLOW_HEADERS = (
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)
これは、倉庫プロジェクトを開始する初期設定です.機能の実装を開始しましょう.まず、会員シップとログインを実現するためにheat appを作成する必要があります.この名前は
user
またはaccount
である必要があります.私はuser
を作ります.会員加入機能の実施
회원가입 기능 구현 app 만들기
python manage.py startapp user
회원가입 user 테이블 만들기
from django.db import models
class User(models.Model):
email = models.EmailField(max_length=50)
password = models.CharField(max_length=300)
phone_number = models.CharField(max_length=20, null=True)
nickname = models.CharField(max_length=20, null=True)
class Meta:
db_table = 'users'
models.py
には、次の表クラスが作成されています.今後の移行でデータベースにテーブルを作成します.마이그레이션하여 테이블 생성
python manage.py makemigrations
python manage.py migrate
views.py
import json, re, bcrypt, jwt
from django.core.exceptions import ObjectDoesNotExist
from django.http import JsonResponse
from django.db import IntegrityError
from django.views import View
from westagram.settings import SECRET_KEY, ALGORITHM
from .models import User
class UserSignUp(View):
def post(self, request):
email_regex = '^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
data = json.loads(request.body)
signup_data = User.objects
hashed_pw = bcrypt.hashpw(data['password'].encode('utf-8'), bcrypt.gensalt())
decoded_hashed_pw = hashed_pw.decode('utf-8')
try:
if not re.match(email_regex, data['email']):
return JsonResponse({'message': 'EMAIL_ERROR'}, status=400)
if len(data['password']) < 8:
return JsonResponse({'message': 'PASSWORD_ERROR'}, status=400)
if signup_data.filter(nickname = data['nickname']).exists():
return JsonResponse({'message': 'UNIQUE_ERROR'}, status=400)
if signup_data.filter(phone_number = data['phone_number']).exists():
return JsonResponse({'message': 'UNIQUE_ERROR'}, status=400)
User.objects.create(
email = data['email'],
password = decoded_hashed_pw,
nickname = data['nickname'],
phone_number = data['phone_number']
)
except KeyError:
return JsonResponse({'message': 'KEY_ERROR'}, status=400)
except IntegrityError:
return JsonResponse({'message': 'UNIQUE_ERROR'}, status=400)
return JsonResponse({'message': 'SUCCESS'}, status=201)
私たちはあなたが以前学んだbcrypt
を使用して、会員になるように暗号化します.email validation
では、正規表現を使用して検証されます.同様に、他の条件では正規表現を使用して検証することもできますが、初めて機能を実装した場合、電子メールのみが正規表現を使用し、他の条件は条件文で検証されます.もちろん、電子メールは条件文で検証することもできますが、条件が長くなり、コードが乱雑になります.最初は、これらはすべて条件文によって検証されましたが、その後、通常式を使用する必要があるため、Eメールで最も長い条件文である通常式が使用されました.Eメールの条件文が長くなるのは、
@
および.
を使用する必要があるためであり、この記号を使用する場合の順序も重要です.re
正規表現Regular Expression
の略語regex
をインポートして使用する必要があります.すなわち、正規表現を使用する機能を許可します.try except
構文は複数のエラーに対して異常処理を行った.パスワード暗号化については、前述の
bcrypt
postingで詳しく説明します.この部分を参考にして、会員時に暗号化を適用すればいいです.Bcrypt暗号化
暗号化プロセスの重要な側面の1つは、データベースに暗号化されたパスワードが含まれている場合、str形式で格納されることです.したがって、バイトタイプとして符号化されたパスワードもtypeがバイトであるが、DBに記憶されている場合は
b$2b$12$dYJ1blTyGOmrCv27nCEPFObqg3A1VOv..TW4z9nfmzChVObjeH9/i
の形式であるが、参照として、先頭のbはバイトを表す記号である.ただし、python shellでtypeを印刷しようとするとstrとして現れるので、以降のトークン発行中にトラブルに遭いたくない場合はstrとしてdecode挿入を行うのが望ましい.try以外の重要な部分は条件文の統一である.Pythonは人間にやさしい言語なので、可読性の良い人だけがPythonを正しく使うことができます.つまり、他の人がどんなコードを見ても、一目瞭然に書かなければならないということです.したがって,try以外に条件文は統一性を持つべきである.条件文でnotを使用する場合は、条件に合致しない場合は、すべてnotフィルタリングとスキップ条件文を使用し、逆も同様です.条件文にnot条件文とnotが存在しない基本条件文を乱用すると可読性が低下する.
すべての条件がうまく実現したら、今すぐデータベースで
httpie
を使って会員登録実習を行いましょう.user/urls.py
from django.urls import path
from user.views import UserSignUp
urlpatterns = [
path('/signup', UserSignUp.as_view()),
]
機能検証
サーバ通信の実験として2つのツールを使用することができます.
httpie
およびpostman
まず、httpieはツールをインストールすることなく、ShellでPythonパッケージを使用することができます.httpie
pip install httpie
postman
https://www.postman.com/ これはPostman公式サイトです.ここではツールをダウンロードして使用できます.
では、
httpie
を使用して実践します.http -v POST localhost:8000/user/signup email="[email protected]"
nickname="테스트" password= "testpassword123" phone_number= "01011223344"
shellでは、クライアントからサーバに次のコマンドを直接要求できます.サーバーを通じて201表示の会員が加入しているのがよく見えます.会員加入に成功した場合は、データベースにも希望の情報が含まれているはずです.
下図のように、データベースにも良い内容が含まれています.
Reference
この問題について(Wecode|Django登録機能の実装), 我々は、より多くの情報をここで見つけました https://velog.io/@ssaboo/TIL-no.55-Wecode-day.26Fri-django-회원가입-기능-구현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol