장고 프로젝트를 다시 시작하며..
장고에 대해서 많은 공부를 했다고 생각했고 스스로 하나의 웹 사이트를 만들 수 있을 것 같다고 생각하여 첫 프로젝트로 웹 포트폴리오 만들기를 진행하였는데 소셜로그인 기능을 구현하는 단계에서 막히면서 여러 검색을 해보니 처음 시작부터 잘못되었다는 것을 알게 되었다.
독학으로 하는 공부이다 보니 처음 방향을 잡는데도 오래 걸리고 그 방향이 잘못되었다는 것을 알아차리는데도 조금 오랜 시간이 지나서 알아차리게 되었지만 프로젝트를 진행하면서 배운 내용이 아예 쓸모없는 내용이 아니라 다시 공부하면서 조금 더 쉽게 이해하였던 것 같다.
기존에 공부를하면서 정리를 하였고 처음부터 시작하면서 기록한 내용들은 지우는 게 좋을까 라는 생각도 하였지만 기존에 공부한 내용을 바탕으로 조금 더 알아보기 쉽고 간편하게 정리하면 서 잘못된 부분은 기존 글을 수정하면서 복습하는 시간을 가지는 것도 좋을 것 같다고 생각하여 기존글들은 그대로 놔둔 채로 진행하려고 한다.
하루하루 진행한 프로젝트 내용을 정리한 글들을 써 내려갈 예정이어서 다른 블로그 들과는 다르게 설명 없이 진행한 부분들만 써 내려가려고 한다.
가상 환경 설정
py -m venv venv
# 현재 가상환경의 모든 모듈 확인
pip freeze
# requirements.txt 파일에 현재 환경을 저장
pip freeze > requirements.txt
# 가상환경 삭제
rmdir {가상환경 이름}
패키지 다운로드
# django 다운로드
py -m pip install Django
# django restframework 다운로드
pip install djangorestframework
프로젝트 만들기
django-admin startproject protpolio
시크릿 키 값 분리 해주기
# secrets.json
{
"SECRET_KEY": "시크릿 키 값"
}
# settings.py
import os, json
from django.core.exceptions import ImproperlyConfigured
# SECRET_KEY 파일 위치
secret_file = os.path.join(BASE_DIR, 'secrets.json')
with open(secret_file) as f:
secrets = json.loads(f.read())
# secrets.json 파일에서 SECRET_KEY 가져오기
def get_secret(setting, secrets=secrets):
try:
return secrets[setting]
except KeyError:
error_msg = "Set the {} environment variable".format(setting)
raise ImproperlyConfigured(error_msg)
SECRET_KEY = get_secret("SECRET_KEY")
시간, 언어 설정
settings.py
LANGUAGE_CODE = 'ko-KR'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_TZ = False
프로젝트 이름 바꾸기
protpolio라는 프로젝트 이름을 config로 변경
manage.py 수정
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
settings.py 수정
ROOT_URLCONF = 'config.urls'
WSGI_APPLICATION = 'config.wsgi.application'
wsgi.py 수정
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
앱 만들기
python manage.py startapp content
모델 만들기
모델 정의
from django.db import models
class Project(models.Model):
title = models.CharField('제목', max_length=126, null=False)
content = models.TextField('프로젝트 설명', null=False)
impression = models.TextField('소감', null=False)
skill = models.TextField('기술', null=False)
github = models.URLField()
blog = models.URLField()
demo = models.URLField()
created_at = models.DateTimeField('작성일', auto_now_add=True)
created_at.editable = True # admin사이트에서 확인 및 수정 가능하게 해줌
# 데이터 표시 형식 변경
def __str__(self):
return '[{}] {}'.format(self.id, self.title)
앱 등록하기
# settings.py
INSTALLED_APPS = [
'bbs', # 등록할 앱이름
'django.contrib.admin', # 장고 어드민 앱
'django.contrib.auth', # 장고 인증 앱
'django.contrib.contenttypes', # 다양한 종류의 모델데이터를 관리할 수 있게 도와주는 앱.
'django.contrib.sessions', # 클라이언트 정보를 세션에서 관리하도록 하는 프레임워크
'django.contrib.messages', # 컨트롤러에서 발생한 정보를 뷰에서 쉽게 접근하도록 연결하는 프레임워크
'django.contrib.staticfiles', # html, css, js 파일등의 정적파일 들을 관리해주는 프레임워크
]
데이터베이스 설정
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # 데이터베이스는 sqlite3 사용
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # 루트 디렉토리에 db.sqlite3 파일로 데이터 저장
}
}
마이그레이션 해주기
py manage.py makemigrations
py manage.py migrate
모델 테스트
py manage.py shell
테스트를 위한 모델 저장
>>> from content.models import Project
>>> project = Project.objects.create(title='How to create a article', content='1. import Article class\n2. invoke \'create\' method of Article\'s manager.', impression= 'impression',skill='skill',github='github',blog='blog',demo = 'demo', created_at='2023-01-31')
>>> print(project)
Project object (1)
>>> print('{} title: {}, content: {}, impression: {}, skill:{}, github: {}, blog: {}, demo: {}, create_at: {},,,,,'.format(project.id, project.title, project.content, project.impression , project.skill, project.github ,project.blog ,project.demo, project.created_at))
1 title: How to create a article, content: 1. import Article class
2. invoke 'create' method of Article's manager., impression: impression, skill:skill, github: github, blog: blog, demo: demo, create_at: 2023-01-31,,,,,
데이터 검색, 수정
>>> from content.models import Project
>>> project = Project.objects.get(id=1)
>>> print(project)
[1] How to create a article
>>> project.created_at = '2023-01-31 15:25'
>>> project.save()
>>> project.created_at.strftime('%Y-%m-%d')
'2023-01-31'
Admin 사이트 만들기
관리자 등록하기
py manage.py createsuperuser
admin사이트에 모델 등록
# content/admin.py
from django.contrib import admin
from .models import Project
@admin.register(Project)
class ProjectAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'content', 'date_created') # date_created는 아래 정의한 메소드
list_display_links = ('id', 'title') # 상세페이지로 이동할 수 있는 필드 리스트
def date_created(self, obj): # create_at 필드의 출력형식을 변경해주는 메소드
return obj.created_at.strftime("%Y-%m-%d")
date_created.admin_order_field = 'created_at' # date_created 컬럼 제목을 클릭시 실제 어떤 데이터를 기준으로 정렬할 지 결정
date_created.short_description = '작성일' # date_created 컬럼 제목에 보일 텍스트
'Django > DRF' 카테고리의 다른 글
Forbidden (CSRF token missing or incorrect.) 해결 방법 (0) | 2023.02.20 |
---|---|
Templateview에서 Html로 DB값 전달하기 (0) | 2023.02.14 |
[Django tutorial] 사용자 인증 (0) | 2023.01.30 |
[Django tutorial] 사용자 인증 - 소셜 로그인 (2) (0) | 2023.01.29 |
[Django tutorial] 사용자 인증 - 소셜 로그인 (1) (0) | 2023.01.21 |
장고 프로젝트를 다시 시작하며..
장고에 대해서 많은 공부를 했다고 생각했고 스스로 하나의 웹 사이트를 만들 수 있을 것 같다고 생각하여 첫 프로젝트로 웹 포트폴리오 만들기를 진행하였는데 소셜로그인 기능을 구현하는 단계에서 막히면서 여러 검색을 해보니 처음 시작부터 잘못되었다는 것을 알게 되었다.
독학으로 하는 공부이다 보니 처음 방향을 잡는데도 오래 걸리고 그 방향이 잘못되었다는 것을 알아차리는데도 조금 오랜 시간이 지나서 알아차리게 되었지만 프로젝트를 진행하면서 배운 내용이 아예 쓸모없는 내용이 아니라 다시 공부하면서 조금 더 쉽게 이해하였던 것 같다.
기존에 공부를하면서 정리를 하였고 처음부터 시작하면서 기록한 내용들은 지우는 게 좋을까 라는 생각도 하였지만 기존에 공부한 내용을 바탕으로 조금 더 알아보기 쉽고 간편하게 정리하면 서 잘못된 부분은 기존 글을 수정하면서 복습하는 시간을 가지는 것도 좋을 것 같다고 생각하여 기존글들은 그대로 놔둔 채로 진행하려고 한다.
하루하루 진행한 프로젝트 내용을 정리한 글들을 써 내려갈 예정이어서 다른 블로그 들과는 다르게 설명 없이 진행한 부분들만 써 내려가려고 한다.
가상 환경 설정
py -m venv venv
# 현재 가상환경의 모든 모듈 확인
pip freeze
# requirements.txt 파일에 현재 환경을 저장
pip freeze > requirements.txt
# 가상환경 삭제
rmdir {가상환경 이름}
패키지 다운로드
# django 다운로드
py -m pip install Django
# django restframework 다운로드
pip install djangorestframework
프로젝트 만들기
django-admin startproject protpolio
시크릿 키 값 분리 해주기
# secrets.json
{
"SECRET_KEY": "시크릿 키 값"
}
# settings.py
import os, json
from django.core.exceptions import ImproperlyConfigured
# SECRET_KEY 파일 위치
secret_file = os.path.join(BASE_DIR, 'secrets.json')
with open(secret_file) as f:
secrets = json.loads(f.read())
# secrets.json 파일에서 SECRET_KEY 가져오기
def get_secret(setting, secrets=secrets):
try:
return secrets[setting]
except KeyError:
error_msg = "Set the {} environment variable".format(setting)
raise ImproperlyConfigured(error_msg)
SECRET_KEY = get_secret("SECRET_KEY")
시간, 언어 설정
settings.py
LANGUAGE_CODE = 'ko-KR'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_TZ = False
프로젝트 이름 바꾸기
protpolio라는 프로젝트 이름을 config로 변경
manage.py 수정
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
settings.py 수정
ROOT_URLCONF = 'config.urls'
WSGI_APPLICATION = 'config.wsgi.application'
wsgi.py 수정
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
앱 만들기
python manage.py startapp content
모델 만들기
모델 정의
from django.db import models
class Project(models.Model):
title = models.CharField('제목', max_length=126, null=False)
content = models.TextField('프로젝트 설명', null=False)
impression = models.TextField('소감', null=False)
skill = models.TextField('기술', null=False)
github = models.URLField()
blog = models.URLField()
demo = models.URLField()
created_at = models.DateTimeField('작성일', auto_now_add=True)
created_at.editable = True # admin사이트에서 확인 및 수정 가능하게 해줌
# 데이터 표시 형식 변경
def __str__(self):
return '[{}] {}'.format(self.id, self.title)
앱 등록하기
# settings.py
INSTALLED_APPS = [
'bbs', # 등록할 앱이름
'django.contrib.admin', # 장고 어드민 앱
'django.contrib.auth', # 장고 인증 앱
'django.contrib.contenttypes', # 다양한 종류의 모델데이터를 관리할 수 있게 도와주는 앱.
'django.contrib.sessions', # 클라이언트 정보를 세션에서 관리하도록 하는 프레임워크
'django.contrib.messages', # 컨트롤러에서 발생한 정보를 뷰에서 쉽게 접근하도록 연결하는 프레임워크
'django.contrib.staticfiles', # html, css, js 파일등의 정적파일 들을 관리해주는 프레임워크
]
데이터베이스 설정
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # 데이터베이스는 sqlite3 사용
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # 루트 디렉토리에 db.sqlite3 파일로 데이터 저장
}
}
마이그레이션 해주기
py manage.py makemigrations
py manage.py migrate
모델 테스트
py manage.py shell
테스트를 위한 모델 저장
>>> from content.models import Project
>>> project = Project.objects.create(title='How to create a article', content='1. import Article class\n2. invoke \'create\' method of Article\'s manager.', impression= 'impression',skill='skill',github='github',blog='blog',demo = 'demo', created_at='2023-01-31')
>>> print(project)
Project object (1)
>>> print('{} title: {}, content: {}, impression: {}, skill:{}, github: {}, blog: {}, demo: {}, create_at: {},,,,,'.format(project.id, project.title, project.content, project.impression , project.skill, project.github ,project.blog ,project.demo, project.created_at))
1 title: How to create a article, content: 1. import Article class
2. invoke 'create' method of Article's manager., impression: impression, skill:skill, github: github, blog: blog, demo: demo, create_at: 2023-01-31,,,,,
데이터 검색, 수정
>>> from content.models import Project
>>> project = Project.objects.get(id=1)
>>> print(project)
[1] How to create a article
>>> project.created_at = '2023-01-31 15:25'
>>> project.save()
>>> project.created_at.strftime('%Y-%m-%d')
'2023-01-31'
Admin 사이트 만들기
관리자 등록하기
py manage.py createsuperuser
admin사이트에 모델 등록
# content/admin.py
from django.contrib import admin
from .models import Project
@admin.register(Project)
class ProjectAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'content', 'date_created') # date_created는 아래 정의한 메소드
list_display_links = ('id', 'title') # 상세페이지로 이동할 수 있는 필드 리스트
def date_created(self, obj): # create_at 필드의 출력형식을 변경해주는 메소드
return obj.created_at.strftime("%Y-%m-%d")
date_created.admin_order_field = 'created_at' # date_created 컬럼 제목을 클릭시 실제 어떤 데이터를 기준으로 정렬할 지 결정
date_created.short_description = '작성일' # date_created 컬럼 제목에 보일 텍스트
'Django > DRF' 카테고리의 다른 글
Forbidden (CSRF token missing or incorrect.) 해결 방법 (0) | 2023.02.20 |
---|---|
Templateview에서 Html로 DB값 전달하기 (0) | 2023.02.14 |
[Django tutorial] 사용자 인증 (0) | 2023.01.30 |
[Django tutorial] 사용자 인증 - 소셜 로그인 (2) (0) | 2023.01.29 |
[Django tutorial] 사용자 인증 - 소셜 로그인 (1) (0) | 2023.01.21 |