[Project] 웹 포트폴리오 제작 - 기본 설정 및 모델 , Admin 만들기

2023. 1. 31. 20:24· Django/DRF
목차
  1. 장고 프로젝트를 다시 시작하며..
  2. 가상 환경 설정
  3. 패키지 다운로드
  4. 프로젝트 만들기
  5. 시크릿 키 값 분리 해주기
  6. 시간, 언어 설정
  7. 프로젝트 이름 바꾸기
  8. manage.py 수정
  9. settings.py 수정
  10. wsgi.py 수정
  11. 앱 만들기
  12. 모델 만들기
  13. 모델 정의
  14. 앱 등록하기
  15. 데이터베이스 설정
  16. 마이그레이션 해주기
  17. 모델 테스트
  18. Admin 사이트 만들기
  19. 관리자 등록하기
  20. admin사이트에 모델 등록
반응형

장고 프로젝트를 다시 시작하며..

장고에 대해서 많은 공부를 했다고 생각했고 스스로 하나의 웹 사이트를 만들 수 있을 것 같다고 생각하여 첫 프로젝트로 웹 포트폴리오 만들기를 진행하였는데 소셜로그인 기능을 구현하는 단계에서 막히면서 여러 검색을 해보니 처음 시작부터 잘못되었다는 것을 알게 되었다. 

 

독학으로 하는 공부이다 보니 처음 방향을 잡는데도 오래 걸리고 그 방향이 잘못되었다는 것을 알아차리는데도 조금 오랜 시간이 지나서 알아차리게 되었지만 프로젝트를 진행하면서 배운 내용이 아예 쓸모없는 내용이 아니라  다시 공부하면서 조금 더 쉽게 이해하였던 것 같다. 

 

기존에 공부를하면서 정리를 하였고 처음부터 시작하면서 기록한 내용들은 지우는 게 좋을까 라는 생각도 하였지만 기존에 공부한 내용을 바탕으로 조금 더 알아보기 쉽고 간편하게 정리하면 서 잘못된 부분은 기존 글을 수정하면서 복습하는 시간을 가지는 것도 좋을 것 같다고 생각하여 기존글들은 그대로 놔둔 채로 진행하려고 한다.

 

하루하루 진행한 프로젝트 내용을 정리한 글들을 써 내려갈 예정이어서 다른 블로그 들과는 다르게 설명 없이 진행한 부분들만 써 내려가려고 한다.

 

 

가상 환경 설정

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
  1. 장고 프로젝트를 다시 시작하며..
  2. 가상 환경 설정
  3. 패키지 다운로드
  4. 프로젝트 만들기
  5. 시크릿 키 값 분리 해주기
  6. 시간, 언어 설정
  7. 프로젝트 이름 바꾸기
  8. manage.py 수정
  9. settings.py 수정
  10. wsgi.py 수정
  11. 앱 만들기
  12. 모델 만들기
  13. 모델 정의
  14. 앱 등록하기
  15. 데이터베이스 설정
  16. 마이그레이션 해주기
  17. 모델 테스트
  18. Admin 사이트 만들기
  19. 관리자 등록하기
  20. admin사이트에 모델 등록
'Django/DRF' 카테고리의 다른 글
  • Forbidden (CSRF token missing or incorrect.) 해결 방법
  • Templateview에서 Html로 DB값 전달하기
  • [Django tutorial] 사용자 인증
  • [Django tutorial] 사용자 인증 - 소셜 로그인 (2)
Jong_seoung
Jong_seoung
기록하자, 머리는 생각하는 곳이지 저장장치가 아니다.
반응형
Jong_seoung
Today_developStory
Jong_seoung
전체
오늘
어제

블로그 메뉴

  • Home
  • Git Hub
  • 분류 전체보기 (351)
    • Theory (16)
    • Java (3)
      • 알고리즘 (2)
      • 문법 (0)
    • Spring (7)
      • 스프링 입문 (6)
      • PickTalk (0)
      • 에러처리 (1)
    • Python (80)
      • 알고리즘 - 이론 (17)
      • 알고리즘 - 내장함수, 라이브러리 등등 (3)
      • 알고리즘 - 백준 (53)
      • 나도코딩 정리 (2)
      • 기타 (5)
    • Django (159)
      • DRF (105)
      • 인프라 (46)
      • DataBases (2)
      • API Docs (6)
    • FrontEnd (22)
      • htmx (2)
      • React (8)
      • 자바스크립트 (12)
    • GIT (16)
    • 기타 (8)
      • 정리 (2)
      • Flutter (1)
      • 마이크로프로세서 - ATmega128 (2)
      • 개발환경 세팅 (3)
    • 자격증 (37)
      • 정보처리기사 (19)
      • SQLD자격증 (18)

인기 글

최근 글

태그

  • alarm
  • BFS
  • CSRF
  • Django
  • django channels
  • django sse
  • django tutorial
  • django 배포
  • django 스웨거 적용
  • Django 이미지 저장

최근 댓글

hELLO · Designed By 정상우.v4.3.0
Jong_seoung
[Project] 웹 포트폴리오 제작 - 기본 설정 및 모델 , Admin 만들기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.