25.TIL Westagram(Django初期設定、モデリング、会員入口県)


期待半分恐怖半分!いよいよWestagramを作る時間です!
既存課題の達成については,同期と比較して時間が長いため,遅れずに時間内にすべての達成すべき課題を達成することを目標としている.
データベースを失った後に初期設定を再設定するのは、経験が蓄積されたためですか?
幸いなことに、初期設定はすぐに完了します.

1.Django初期設定


3つのターミナルを設置して作業するのは便利です.
Mysql、runserver、基本タスク端末.
-conda優先パラメータ
必要なディレクトリに移動し、condaの仮想環境を開きます!
conda create -n westagram python = 3.8
conda activate westagram
-Mysql端末設定
mysql -u root -p : 비밀번호 입력하기
CREATE DATABASE westagram CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-クローンgit
[現在のディレクトリをgitリポジトリとして作成]
gitクローンを行う場合はinitを必要とせず,コピーしたディレクトリアドレスを入れるだけでよい.git "복사한 주소" .後ろはおおお~撮ってあげる!!
[現在のディレクトリにgitリポジトリを作成]git clone "복사한 주소" -pipのインストール
django, mysqlclient, django-cors-headers, PymySQLconda install -c quantopian mysqlclientM 1 mysqlclientエラーが発生した場合はcondaを使用してインストールしてください.
-Djangoプロジェクトの設定
git checkout -b feature/dodam-initial-setting
checkout -bを使用するとブランチを作成しながらチェックアウトできるので便利です!😋django-admin startproject westagramdjangoプロジェクトを開始!
- settings.pyの設定
:IP、未使用のアプリケーションコメントおよび使用のアプリケーション入力を許可する(corsheader)
対応するCorsheader特別事項を修正します!
注記admin、auth、csrf.
secret keyを事前にコピーしましょう!
ALLOWED_HOSTS = ['*'] : 모든 IP 허용

INSTALLED_APPS = [
#    'django.contrib.admin',
#    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages'
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
#    'django.middleware.csrf.CsrfViewMiddleware',
#    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
-urls.py設定の確認
from django.urls import path

urlpatterns = [
]
- my_settings.pyの作成
: database ENGINE = 'django.db.backends.mysql' 設定していない場合は、データベースエラーが発生します.必ず確認!
名前はmysqlデータベースの名前と同じである必要があります.
スペル入力に注意してください!
DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'Westagram',
        'USER': 'root',
        'PASSWORD': 'DB접속용 비밀번호',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

SECRET_KEY = '시크릿키' #settings.py에 있는 secret_key 를 사용합니다.
-settings.py <-> my_settings.py連動とcoresheader修正
from pathlib        import Path #기존에 settings.py 에 있는 코드
from my_settings import DATABASES, SECRET_KEY
import pymysql
pymysql.install_as_MySQLdb()
...

DATABASES = DATABASES

SECRET_KEY = SECRET_KEY

INSTALLED_APPS = [
...
		'corsheaders'
]
MIDDLEWARE = [
	...
		'corsheaders.middleware.CorsMiddleware',
	...
]

#REMOVE_APPEND_SLASH_WARNING
APPEND_SLASH = False

##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',
		#만약 허용해야할 추가적인 헤더키가 있다면?(사용자정의 키) 여기에 추가하면 됩니다.
)
- requirements.txtの作成
:同じ開発環境を構築するために管理されます.pyがある場所でコマンドを作成する必要があります.pip freeze
touch requirements.txt
vi requirements.txt

Django==3.2.4
django-cors-headers==3.7.0
mysqlclient==2.0.3

PyMySQL==1.0.2
- .gitignoreの作成
gitignoreサイトを使用してgitにアップロードすべきでないコンテンツを入力します.
ファイルにコピーした内容を入力し、下部にmy_settings.pyを入力します.
重要な情報を管理してアップロードしないでください!python, linux, macOS, VisualStudioCode,pyCharm, vim, Zsh は、
  • runserverを返します.python manage.py runserverサーバーを開き続け、エラーが発生していないかどうかを確認します.
  • ▼▼よくミスをするところ
    1) setting.py my_settings.pyではなくmy settingsです!
    from my_settings import DATABASES, SECRET_KEY
    2) settings.pyinstall appを追加して撮影
    -git pullを要求
    git add . : 전체를 .add
    git add users/urls.py : urls.py 파일만 업로드!
    git commit -m "메시지 입력"
    git push origin feature/dodam-initial-setting
    git上でアップロードします.仕事が終わったら、GithubにPRを提出し、承認を受けます!🙂

    2.モデリング


    -git新規ブランチの作成git checkout -b feature/dodam-models-ユーザーアプリケーションの作成python manage.py startapp usersmanage.pyがあるディレクトリの下で実行する必要があります!
    - settings.user appをpyに追加!
    忘れないで!
    -モデリングを続行
    記入しなければならない情報.
    :名前、Eメール、パスワード、連絡先、その他の個人情報
    私のモデル
    from django.db import models
    
    
    # Create your models here.
    class User(models.Model):
    	name 		 = models.CharField(max_length=45)
    	email	 	 = models.CharField(max_length=200, unique=True)
    	password 	 = models.CharField(max_length=200)
    	phone_number = models.CharField(max_length=20)
    	birthday	 = models.DateTimeField()
    
    	class Meta:
    	   db_table = 'users'
    🔥 創作の要点
    🌱 Userという名前のクラスを作成し、名前、電子メール、パスワード、携帯電話番号を内部に入れます.
    他の個人情報、初めて作成したコード以外の個人情報は本当に...(INS検索したら紹介?)ある程度考慮してetc通知を書きました.
    指導者からのフィードバックを得て、関連事項を誕生日に変更します.
    🌱 今.各プロジェクトに適切なフィールドを追加する必要があります.
    名前と電子メールをCharFieldに書くべきだと思います.
    passwordとphone numberの既存の正数を使用する場合に使用するpostiveIntegerfieldであればよい.
    でも….パスワードと携帯電話番号にpositiveIntegerFieldを使うのは誤った判断です.
    パスワードには、アルファベット、数値、特殊文字が含まれている必要があります.
    携帯番号に該当する値を代入すると、最初の0は表示されません!そのためCharFieldに変更されました.
    🌱 誕生日現場では初めて使用したDateTimeFieldを使用しました.ユーザーが入力した値は、後で変更できます!形式はYYYY-MM-DDで、POSTの時は参考にしてください!
    🌱 Emailは1つの値しかないので、Unique = Trueの値をあげます!
    👩🏻‍💻 レビュー後の変更履歴
  • phone number、パスワードフィールド値
  • を変更
  • et information=>誕生日
  • に具体化
  • Passwordは空ではなく、null=falseの値を別途与える必要はありません!
  • 3.会員入金機能の実現


    マイビュー
    import json, re
    #json과 re정규식을 사용한다
    from django.views import View
    from django.http import JsonResponse
    
    from users.models import User
    
    #비밀번호 정규식 : 8자이상, 문자, 숫자, 특수문자 사용필요
    password_regular = re.compile("^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$")
    class UserView(View):
    	def post(self,request):
    		try:	
    			data = json.loads(request.body) # 프론트가 requset한 정보를 바디에 담아 json 을 활용해 읽어내겠다는 의미 
    			# 중복에러 설정하기
    			if User.objects.filter(name=data['name']).exists() or User.objects.filter(email=data['email']).exists(): 			
    				return JsonResponse({'MESSAGE': 'DATA_OVERLAP'}, status = 400)		
    
    			# 이메일 필수조건 설정 및 패스워드 설정 관련 정규식 : 8자이상, 문자, 숫자, 특수문자 조건 충족
    			if ('@' not in data['email']) or ('.'not in data['email']) or (not password_regular.match(data['password'])):
    				return JsonResponse ({'MESSAGE': 'INVALID_FORMAT'}, status = 400)
    
    
    			User.objects.create(
    			name 		 = data['name'],
    			email	 	 = data['email'],
    			password	 = data['password'],
    			phone_number = data['phone_number'], 
    			birthday 	 = data['birthday'],
    			)
    			return JsonResponse ({'MESSAGE' : 'SUCCESS'}, status = 201)
    
    		except KeyError: # 키 값이 빠진다면 나오는 오류
    			return JsonResponse ({'MESSAGE': 'KEY_ERROR'}, status = 400)
    ✅ urls.pyの変更
    from django.urls import path
    from .views import UserView, LoginView
    
    urlpatterns = [ 
    	path ('', UserView.as_view()),
    	path ('/login',LoginView.as_view()),
    ]
    :いいえ、再作成する必要があります
    from django.urls import path, include
    
    
    urlpatterns = [
        path('users', include('users.urls'))
    ]
    
    🔥 創作の要点
    🌱 私はまだいろいろな文法に慣れていないので、できるだけ直感的に書きたいです...!よくわからないのはgooglingをたくさんしたけど...正規表現を使用する必要があるため、正規表現に関する情報をあちこち探して、パスワードで正規表現を使用することを決定します.
    🌱 複数のエラーに条件を設定する必要があります.Eメールまたは同じ名前がある場合は?参加するのが難しいので、前回の授業で習ったmysqlの方法で条件をあげるべきだと思います.exists()を思い出しました.この概念を用いて,重複をチェックする文法を記述した.
    🌱 メールに@わあ.存在しないとフォーマットに合致しません.この条件も公式化しなければならないが、考えにくい.長いこと探していたが,考えずに文法を運用した.
    👩🏻‍💻 レビュー後の変更履歴

  • if notで接続された2つの文と、電子メールに同じ名前がある場合、IDを作成できない2つの文は同じエラーを返します.したがって,orを用いて1つの文に組み合わせると簡潔に認められ,修正される.
    ただ、文章がずいぶん長くなったようで残念です.このような状況で、どのように表現すればもっと効率的か知りたいです!

  • importとfromの順に並べ替えます.
    1つのimportでjsonとreを組み合わせ、http、view、models、dbの順に記録します.
    Python自身のモジュール、ドラムモジュール、私が作成したクラスの順序、importにも順序があり、指導者の妍雨さんは、順序が正しいなら勉強しなければならないと言っています.

  • Unique=true Inter砂利Errorの削除
    重複値を検証する論理が記述されており、構文のほかに、このエラーの構文も1回書かれています.不要な部分を確認して削除-!
  • 🌈 会員加入実施後に加入した会員10名。



    最近はサーの『義生2』を見るのが大好きなので、登場人物たちが入っていて、ふふ
    Postを使って会員登録を試みると、データベースやMysqlが正しく設定されていても404エラーが発生し、登録できなくなります
    migrateと修正をやり直すのかと思ったらビックリ🥺
    Mysql insertを使用して一人を強制加入させた後、Postの作成内容を繰り返し修正し、最終的に実現した.
    これはまだ馴染みのない問題ですが・・・ううう
    PostとGetの概念を再整理し、Postにも馴染みのある教訓を得た.
    いよいよWestagram提出課題部分の半分?終わりました.
    モデルとビューの作成にはまだ詳しくありません.
    文法が正しいかどうかを検証する必要があり、熟練していない部分がグーグルの助けを得た.
    自分で完璧な模型とビューを作れる日まで-!!!
    ipythonで作成した文法が正しく動作しているかどうか撮りましょう.