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
▪️터미널 창에서 migration 생성
▪️main > migrations > 0001_initial.py
▪️ 데이터베이스에 반영하기
▪️ 데이터베이스에 데이터 삽입 방법 3가지
- admin side에서 넣는 방법 ✅
- 데이터 seeding으로 데이터를 한꺼번에 넣는 방법
- shell에서 넣는 방법
✅ admin side에서 넣는 방법
터미널에서 작업하기
python manage.py createsuperuser
사용자 이름 : snowwhite
이메일 : sophia991106@gmail.com
▪️ 데이터베이스 변수형 관련 참고 문서
'WEB > Django' 카테고리의 다른 글
[Django] Django 구조와 MTV (0) | 2022.04.10 |
---|---|
[Django] admin 페이지에 Notice 등록하기 (0) | 2022.04.10 |
[Django] goormIDE에서 프로젝트와 github 연동하기 (0) | 2022.04.09 |
[Django] Django 프로젝트 생성 (goormIDE) (0) | 2022.04.09 |
[Django] Django 입문 (0) | 2022.04.09 |
댓글