본문 바로가기
WEB/Django

[Django] 프로젝트 파일 속성값

by snow_white 2022. 4. 10.

static file과 settings

장고 Rule

◾ 장고에서는 모든 파일을 로드할 때 상대경로를 지정하여 불러올 수 없다.

◾ html 파일에서 head 태그 내의 css파일이나 body 태그 내의 js파일을 불러올 때도 마찬가지로 아래와 같이 파일 가장 상단에 템플릿 코드를 추가해주어야 로드 가능하다.

◾ 불러올 파일 역시 템플릿 코드 형식으로 {% static 'jeju.jpg' %} 로 감싸준다.

◾ 이때 정적 파일을 의미하는 static 키워드를 꼭 명시해주어야 한다.

◾ main 폴더 > static 폴더 생성 후 불러올 파일(jeju.jpg)을 static 폴더 내부로 옮긴다.

◾ static 파일이 모여있는 static 폴더를 setting.py 파일에 명시해주어야 한다.

<!-- index.html 파일에 템플릿 코드 작성  -->
**{% load static %}** 

<!-- html 작성  -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>
    hello world index.html
    </h1>
    <img src=**"{%static 'jeju.jpg'%}"** alt=''>
    <form action='/' method="POST"> 
        {% csrf_token %}
        <input type='text' name='id'><br>
        <input type='password' name='pw'><br>
        <input type='submit' name='로그인'>
    </form>
</body>
</html>
# settings.py에 아래 코드 추가
# static 파일 명시해주는 코드

STATICFILES_DIRS = [
    BASE_DIR,'static',
]

◾ settings.py 파일의 속성 값

  • BASE_DIR : settings.py의 부모의 부모를 base directory로 잡는다
  • SECRET_KEY : settings.py의 부모의 부모를 base directory로 잡는다
  • DEBUG = True : 오류 페이지에 대한 상세 내용 출력 <-> False로 두면 내용 출력 안 됨
  • ALLOWED_HOSTS = ['*'] : 괄호 안에 명시한 사용자만 접근 가능하게 제한함. *은 모든 사용자를 의미
  • INSTALLED_APPS : 장고가 생성이 되었을 때 기본적으로 설치되는 라이브러리를 앱 형태로 제공
  • MIDDLEWARE : 주로 보안과 관련된 것들
  • AUTH_PASSWORD_VALIDATORS : 사용자 비밀번호 유효성 검사
  • STATICFILES_DIRS : 정적 파일들 관리
  • settings.py 내부 코드

template 상속과 폴더변경

코드 작성 중 페이지의 중복된 부분(ex. header, footer, menu)이 있을 때 일일이 전부 수정하기엔 너무 비효율적이다!

화면의 header는 1번, nav는 2번, footer는 3번으로 각각의 파일로 통일해서 가져다 사용하자.

▫️index.html을 부분 별로 잘라 별도의 파일로 생성하기

▫️index.html의 body 부분을 base.html에 구현한 후 실행

  • main > templates > index.html 원본
{% load static %} <!-- 템플릿 코드 작성  -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>
    hello world index.html
    </h1>
    <img src="{%static 'jeju.jpg'%}" alt='' width='200px'>
    <form action='/' method="POST"> <!-- POST 방식으로 사용자가 요청하면 views.py에서 request로 받았을 때 정보 출력 가능 -->
        {% csrf_token %}

        <input type='text' name='id'><br>
        <input type='password' name='pw'><br>
        <input type='submit' name='로그인'>
    </form>
</body>
</html>
  • main > templates > index.html 수정 ⇒ 템플릿 코드 + body 내용만 담음
{% extends 'base.html' %}
{% load static %}
{% block body %}
<img src="{%static 'jeju.jpg'%}" alt='' width='200px'>
    <form action='/' method="POST"> <!-- POST 방식으로 사용자가 요청하면 views.py에서 request로 받았을 때 정보 출력 가능 -->
        {% csrf_token %}

        <input type='text' name='id'><br>
        <input type='password' name='pw'><br>
        <input type='submit' name='로그인'>
    </form>
{% endblock body %}
  • main > templates > base.html 생성 ⇒ 페이지 골격 + 템플릿 코드
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>
    hello world index.html
    </h1>
    
    <!--body 내용-->
    {% block body %}
    {% endblock body %}
    
    <!--footer 내용-->
    <<p> footer</p>
</body>
</html>

▫️ main > templates 내용들 복사

▫️ 최상위 프로젝트 폴더 > templates 폴더 생성 후 붙여넣기

▫️ settings.py 파일에서 생성한 templates 등록

▫️ 앞으로 templates 관련 파일들은 가장 외부에 위치한 templates 내에서 찾아 적용됨

따라서 모든 프로젝트의 templates을 가장 외부에 하나로 통일해서 사용 가능

  • djangomtv/main/templates/base.html
djangomtv/main/templates/base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>
    hello world main > templates > index.html
    </h1>
    
    <!--body 내용-->
    {% block body %}
    {% endblock body %}
    
    <!--footer 내용-->
    <p>
        footer
    </p>
</body>
</html>
  • djangomtv/templates/base.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>
    hello world djangomtv > templates > index.html
    </h1>
    
    <!--body 내용-->
    {% block body %}
    {% endblock body %}
    
    <!--footer 내용-->
    <p>
        footer
    </p>
</body>
</html>

 

▫️ 서버 구동하면 가장 외부의 templates에 속해 있는 index.html이 호출됨

 


model

 

모델(model)이란?

Django에서는 SQL을 직접 작성하지 않아도 모델을 지정하면 DB에 저장된다.그렇다면 데이터베이스에는 어떤 것이 들어있을까?

사용자에 대한 ID, PW 등 개인 정보나 우리가 만들 테스트지의 문항, 그 결과값 등 다양한 데이터들이 저장되어 있다.

(여기서 SQL이란 관계형 데이터베이스 관리 시스템으로, 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.)

 

그렇다면 데이터베이스에는 어떤 것이 들어있을까?

사용자에 대한 ID, PW 등 개인 정보나 우리가 만들 테스트지의 문항, 그 결과값 등 다양한 데이터들이 저장되어 있다.

 

모델 작성

우리가 작성하고자 하는 모델의 설계는 다음과 같다.

 

▪️모델 클래스는 [해당 앱 폴더]/models.py 에 작성한다.

from django.db import models

# Create your models here.
class Notice(models.Model): # 클래스 작성시 변수만 지정하면 됨
     title = models.CharField(max_length=100) # 게시물제목: 문자열 field, 최대 길이 100 제한
     like_count = models.IntegerField() # 좋아요수
     view_count= models.IntegerField() # 뷰수
     contents= models.TextField() # 내용
    
#lass 댓글():    # 게시물 : 댓글  =>  1:N 혹은 N:N

 

▪️데이터베이스 생성 시 어떤 field를 선택할 수 있는지 확인 가능!

Model field reference | Django documentation | Django

 

Model field reference | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

▪️터미널 창에서 migration 생성

▪️main > migrations > 0001_initial.py

 

▪️ 데이터베이스에 반영하기

 

▪️ 데이터베이스에 데이터 삽입 방법 3가지

  1. admin side에서 넣는 방법 ✅
  2. 데이터 seeding으로 데이터를 한꺼번에 넣는 방법
  3. shell에서 넣는 방법

✅ admin side에서 넣는 방법

터미널에서 작업하기

python manage.py createsuperuser

사용자 이름 : snowwhite
이메일 : sophia991106@gmail.com

 

▪️ 데이터베이스 변수형 관련 참고 문서

django/init.py at main · django/django

 

GitHub - django/django: The Web framework for perfectionists with deadlines.

The Web framework for perfectionists with deadlines. - GitHub - django/django: The Web framework for perfectionists with deadlines.

github.com

댓글