가상환경생성
conda create -n <가상환경이름> python=3.8
가상환경 활성화
conda activate <가상환경이름>
프로젝트 폴더로 이동 & 장고 설치
cd ..<프로젝트경로>
pip install django
프로젝트 디렉토리에 장고 프로젝트 설치
django-admin startproject <프로젝트명>
: 프로젝트명/프로젝트명 으로 구조 생성
django-admin startproject <프로젝트명> .
: 현재폴더에/프로젝트명 으로 구조 생성
settings.py
python manage.py startapp <앱이름>
앱이름/views.py
작성하기
뷰가 불필요하면 작성하지 않아도 된다.
아래 예제코드는 회원가입 관련 views.py
from django.views import View # 뷰 작성을 위한 클래스 임포트
from django.http import HttpResponse, JsonResponse # http관련 모듈 임포트
form .models import User
def 유효성검사할함수(): # 회원가입시 진행할 유효성 검사 함수를 작성
return bool
class SignUpView(View) :# 뷰 클래스를 상속받아 사용
# 회원가입 인풋 유효성검사
VALIDATION_RULES = {
"email" : {
"validatior": 유효성검사할함수,
"message": "invalid email" # false일때 전달메세지
}, ...
}
def post(self,req): # post요청일때 할것
# req.body에 담긴것을 json으로 변환하여 data 변수에 담는다
data = json.loads(req.body)
try :
# 각 필드에 대한 값이 맞는지 확인한다
for field in data :
rule = VALIDATION_RULES[field]
if rule['validator'](data[filed):
return JsonResponse({'error':rule['message']}, status=400)
if len(data['password']) < 6 : # 비밀번호가 6보다 짧을때
return JsonResponse({"message":"비밀번호짧"},status=400)
# 유효성검사 문제 없을경우 데이터 베이스에 저장
User(
email = data['email']
password = bcrypt.hashpw(data['password'].encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
).save()
expect ValidationError :
return HttpResponse(status=400)
expect KeyError :
return HttpResponse(status=400)
앱의 urls.py와 프로젝트의 urls.py 2개 파일을 수정해야 한다.
# urls.py에서 항상 불러오는 모듈
from django.urls import path
# 해당앱에서 내가 만든 views를 불러들인다
from .views import SignUpView , SignInView , KakaoSignInView , AddressView
# urlpatterns 리스트
urlpatterns = [
# path('경로', 뷰클래스.as_view()),
path('/signup', SignUpView.as_view()),
path('/signin', SignInView.as_view()),
# url 파라미터 접근
path('/address/<int:address_id>' , AddressView.as_view()),
]
# path와 include를 임포트한다
from django.urls import path, include
# 루트경로일때 사용할 홈뷰를 가져온다.
from .views import HomeView
urlpatterns = [
path('products', include('products.urls')), # product 앱의 urls 연결
path('', HomeView.as_view()), # 루트 접근시 get으로 날리는 것
path('order', include('order.urls')), # order 앱의 urls 연결
path('account', include('account.urls')) # account 앱의 urls 연결
]
python manage.py migrate
로 초기 마이그레이트 > db 적용
from django.db import models
class User(models.Model): # 모델 모듈의 Model클래스를 상속받는다
email = models.EmailField(max_length=200, unique=True, verbose_name='email', null=True)
password = models.CharField(max_length=200, null=True)
first_name = models.CharField(max_length=45, null=True)
last_name = models.CharField(max_length=45, null=True)
create_at = models.DateTimeField(auto_now_add=True, null=True)
update_at = models.DateTimeField(auto_now=True, null=True)
is_delete = models.BooleanField(default=False)
address = models.ManyToManyField('Address', through='User_address')
class User_address(models.Model): # FK의 경우 참고
address = models.ForeignKey('Address', on_delete=models.CASCADE, null=True)
user = models.ForeignKey('User', on_delete=models.CASCADE, null=True)
class Meta:
db_table = 'user_addresses'
class Meta:
db_table = 'users' # 테이블 이름 지정
class Meta:
db_table ='테이블이름'
models.py 파일을 수정하면 모델활성화를 해준다. migrations, migrate는 내가 짠 코드와 DB를 서로 공유? 같게 만들어주는 기능~
INSTALLED_APPS = [
'django.~~.~~,
<앱이름>, # 앱이름만 넣어 추가해도 되고
<앱이름>.apps.<Appname>Config # polls.apps.PollsConfig
]
<앱이름>,
<앱이름>.apps.<Appname>Config
polls.apps.PollsConfig
python manage.py makemigrations polls
polls 앱 마이그레이션 하기, 마이그레이션을 실행시키면 내가 모델을 변경(새로만들기, 수정, 지우기 등)시킨 사실과 변경사항들이 migration으로 저장하고싶다고 django에게 알린다. 위 명령어를 사용할 때마다
<앱이름>/migrations/<코드>_initial.py
파일이 생성된다.
python manage.py sqlmigrate polls 0001
python manage.py sqlmigrate <앱이름> <마이그레이션코드숫자4자리>
마이그레이션 코드와 위 명령어로 어떤 변경사항이 있었는지 알수 있다.
마이그레이트 & 마이그레이션 ?
- (models.py 에서) 모델을 변경합니다.
python manage.py makemigrations
을 통해 이 변경사항에 대한 마이그레이션을 만드세요.python manage.py migrate
명령을 통해 변경사항을 데이터베이스에 적용하세요.
인터프리터 데이터베이스 가지고 놀아보자.
save()명령어로 db에 데이터를 저장한다.