지금은 nodejs + React로 프론트엔드 개발을 주로 하고 있지만
이전에 Django 프레임워크를 사용하여 웹 개발을 한 적이 있었습니다.
처음 Django 프레임워크를 사용할 때 일단 튜토리얼을 따라하면서 시작했는데
그때 제가 참고하려고 만든 Cheating Sheet 입니다.
프레임워크가 완전히 익숙해지기 전에 초기 개발 환경 설정시 참고하기 좋은 아~주 기본적인 내용입니다. :)
Django
#1 환경설정
1) Vs code를 실행해서 프로젝트를 위해 만든 폴더를 열어준다. or ('code .' command in cmd )
2) 가상환경 실행:
$ source myvenv/Scripts/activate
- 항상 myvenv(가상환경이름)이 있는 폴더 위치에서 실행 명령
** 가상환경 설치: python -m venv myvenv
3) project만들기
$ Django-admin startproject [프로젝트명]
- 폴더 안에 폴더가 생기면 상위 폴더 이름 헷갈리지 않게 바꾸기
4) app만들기: Manage.py 있는 폴더에
$ python manage.py startapp [앱명]
-app은 project의 구성단위
project생성시 자동생성 폴더 내부(init.py, asgi.py, settings.py, urls,py, wsgi.py)
App폴더 내부(init.py, admin.py, apps.py, models.py, tests.py, views.py)
5) project에 app 존재 알리기: app 폴더에 프로젝트 생성시 자동으로 프로젝트 내부에 생긴 폴더에 있는 settings.py파일에 아래 코드 추가
INSTALLED_APPS = [
‘[app명].apps.앱명Config’,
]
6) Template 만들기: App이 유저에게 보일 화면을 구성하기 위해 app폴더 내에 templates 폴더를 만들고 해당 폴더 안에 html파일을 만든다.
- templates/[파일명].html
7) 앱 기능 구현하기: app 폴더 안의 view.py에 아래와 같은 함수 추가하기
Def 함수이름(request):
Return render(request, ‘template 파일이름.html’)
- template적용을 위한 기본 함수 / 함수이름이랑 파일이름 일치!
8) url요청을 view에 연결하기: 프로젝트 내부 자동 폴더에 urls.py에 추가하기
import app명.views (app안에 있는 views파일)
urlpatterns = [
path( ‘ ‘, app명.views.함수명, name = ‘path명’),
]
- django프로젝트 어디서든 home경로를 통해 해당 함수 호출가능
- user에게 보여지는 view랑 template폴더 안의 html파일이 연결
9) 서버 실행
$ python manage.py runserver
1. settings.py ⇒ project에게 app의 존재 알리기
2. templates ⇒ views.py에서 처리된 데이터를 받아 사용자에게 화면을 보여줌
3. views.py ⇒ 데이터를 처리하는 함수 작성
4. urls.py ⇒ 요청에 맞는 함수를 views.py에서 찾아 요청 전달
**settings.py** → **templates** → **views.py → urls.py** 순으로 연결
#2 모델 만들기
1) app내부 폴더 models.py에 테이블 생성
class ~~(대문자로 테이블 이름 짓기)(models.Model):
column = models.[datatye](condition)
def __str__(self):
return self.ㅁ.ㅁ //ㅁ이 목록에 보이는 코드
** datatype 예시:
ForeignKey(settings.AUTH_USER_MODEL)
CharField(max_length=100)
TextField(blank=True)
DateTimeField(auto_now_add=True)
2) python manage.py makemigrations로 migration만들기
- python 코드를 DB가 알아들을 수 있게 하는 명령
3) python manage.py migrate를 통해 DB에 적용하기
- DB에 python코드의 내용을 적용하는 명령
#3 admin만들기
1) admin만들기
python manage.py createsuperuser
else:
./manage.py createsuperserver
127.0.0.1/admin 로 접속하여 admin 로그인 사이트 등장
2) admin에 model 등록하기: app폴더에 admin.py안에
from .models(=model파일명) import [model table명/클래스명]
admin.site.register(table명/클래스명)
- app사이트에 admin등록하기
** app을 setting파일에 등록해서 프로젝트에 파일 알리는 것과 같은 방식
**django의 setting.py 에 있는
TIME_ZONE='Asia/Seoul'
LANGUAGE_CODE='ko-kr' 으로 변경해주기
#4 view로 DB가져오기
1) 메소드 설정: app 폴더의 views.py 기존 코드에 아래 코드 추가
from .models(=model파일명) import [model table명/클래스명]
Def 함수이름(request):
변수 = table명.objects (table안의 데이터)
Return render(request, ‘template 파일이름.html’)
2) App명.templates. html파일에서 {{ view에 넘어온 데이터 변수명 }}
{{ view에 넘어온 데이터 변수명.column명 }} – 해당 column정보만 가져오기
{{ view에 넘어온 데이터 변수명.all }} – table의 모든 정보 가져오기
3) urlConfig만들기:
app내부의 templates폴더 안에 detail.html로 디테일 페이지를 만든다.
app.urls.py 파일에 아래 코드 추가
// urlpatterns = [path( ‘ ‘, app명.views.함수명, name = ‘path명’),]이 형식 내부에
urlpatterns = [ path( ‘admin/‘, admin.site.urls),
path( ‘ ‘, table명.views.함수명, name = ‘함수명과 같은 경로명’),
path( ‘table명/<자료형:table명_column명>/’, table명.views.detail, name=’detail’),]
Table의 pk (int겠지?)를 전달받아서 url을 디자인한다.
**<type:name> path-converter
4) view만들기: template연결을 위해!
app폴더 내에 views.py파일 수정
from django.shortcuts import render, get_object_or_404 첫 줄에 추가하기
def detail(함수명)(request, table_pk):
디테일 변수 = get_object_or_404(table명, pk= table의 pk)
Return render(request, ‘html 파일 명.html’, {‘appmaintemplate’: db받아올 template})
from django.shortcuts import render, get_object_or_404 첫 줄에 추가하기
def detail(함수명)(request, table_pk):
디테일 변수 = get_object_or_404(table명, pk= table의 pk)
Return render(request, ‘html 파일 명.html’, {‘appmaintemplate’: db받아올 template})
5) 모델 수정하기
** def summary(self): return self.body[:100] - 자기자신의 클래스(현클래스).body에서 100글자 출력하라는 함수
'웹 개발 > Web Development' 카테고리의 다른 글
테스트툴) Playwright 란 (0) | 2023.03.04 |
---|---|
Vuepress란 무엇인가 (0) | 2023.02.06 |
/etc/hosts 로컬에서 ip 주소 호스트네임 등록해 두고 사용하기 (0) | 2021.06.16 |
웹 개발) 브라우저 저장소 Web Storage (0) | 2021.04.09 |
웹 개발) Reatful API (0) | 2021.04.09 |