Django 로 프로젝트를 시작했다.
처음 접하는 거라 분명 프로젝트 생성하고 다룰 때마다 헤맬 것이 분명하므로 정리해둔다.
장고걸스 보면서 정리
장고걸스에서 메인은 mysite, 앱은 blog
생성한 프로젝트 폴더로 이동해서 python -m venv yenyvenv
(yenyvenv
부분은 생성할 가상환경 이름)
source yenyvenv/bin/activate
명령어로 가상환경을 실행한다.
프롬프트 앞에 (yenyvenv)
와 같이 본인이 생성한 가상환경의 이름이 뜬다면 성공
(종료는 deactivate
)
python -m pip install --upgrade pip
: 장고 설치에 필요한 pip
이 최신 버전인지 확인pip install django~=2.0.0
: 장고 설치python manage.py migrate
python manage.py runserver
종료하려면 control + c
정돈된 환경에서 모델을 만들기위해 어플리케이션을 만든다.
프로젝트 내부에 별도의 어플리케이션 만들기
프로젝트 폴더, 가상환경 실행된 상태에서
python manage.py startapp xxxx
(xxxx는 생성할 어플리케이션 이름)
그러면 xxxx라는 디렉토리가 생기고 그 아래에
migrations
, __init__.py
, admin.py
, models.py
, tests.py
, views.py
생성된다.
어플리케이션 생성하고 사용하려면 장고에 알려줘야 한다.
settings.py 파일 안에서 ISTALLED_APPS
에 어플리케이션 이름을 추가해준다.
기본 세팅이 끝났으면 이제 모델을 만들어보자. 장고에서의 모델은 객체다.
객체가 어떻게 구성되야하는지 생각하고 모델을 만들자.
어플리케이션 폴더 하위의 models.py 에 모델을 만든다.
class 모델이름(models.Model)
으로 만드는데 이때 모델 이름의 첫 글자는 대문자여야 한다. models
는 장고 모델임을 의미한다.
어플리케이션 수정하고나면 장고에게 알려줘야한다. 왜냐하면 데이터베이스에 모델을 위한 테이블을 만들어야하기 때문!
1. python manage.py makemigrations 어플리케이션이름
: 데이터베이스에 반영할 수 있는 마이그레이션 파일 생성
이렇게 하면 만든거고,
2. python manage.py migrate 어플리케이션이름
: 실제 데이터베이스에 모델 추가
모델링한 글들을 장고 관리자에서 추가하거나 수정, 삭제할 수 있다.
blog/admin.py
에 모델을 from .models import 모델명
admin.site.register(모델명)
로 모델을 등록
python manage.py createsuperuser
로 관리자 생성
URLconf
: 장고에서 URL과 일치하는 뷰를 찾기 위한 패턴들의 집합
💡 메인의 urls.py
1. mysite/urls.py
파일을 깨끗하게 유지하기 위해, blog 애플리케이션에서 메인 mysite/urls.py
파일로 url들을 가져와야한다.
blog.urls
를 가져오려면, include
함수가 필요하다.
from django.urls
행을 찾아 include
함수를 추가한다.
2. urlpatterns
에 path('', include('blog.urls'))
를 추가한다.
💡 앱의 urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
]
post_list
라는 view
가 루트 URL에 할당된 것이다.
이것으로 장고에게 누군가 웹사이트에 'http://127.0.0.1:8000/' 주소로 들어왔을 때 views.post_list를 보여주라고 알려줄 수 있다.
views.py
는 애플리케이션의 "로직"을 넣는 곳from .models import 모델명
으로 모델 가져오기Post.objects.all()
하거나 filter걸어서 가져오고 싶으면 Post.objects.filter(필터 조건)
으로 변수 만들어주기return render(request, 'blog/post_list.html', {'posts': posts})
blog -- templates -- blog 폴더 생성
디렉토리 안에 post_list.html
생성
html 신나게 작성하면 된다.
템플릿 태그 이용해서 빠르게 만들기 (if, for 등)
쿼리셋(QuerySet)
: 전달받은 모델의 객체 목록blog -- static -- css 폴더 안에 blog.css 생성, 여기에 작성
템플릿에 연결하려면
1. html파일 맨위에 {% load static %}
추가
2. <link rel="stylesheet" href="{% static 'css/blog.css' %}">
head에 추가
base.html
만들기
이건 장고걸스 내용 보자 -> 장고걸스 템플릿 확장하기
이건 장고걸스 내용 보자 -> 장고걸스 애플리케이션 확장하기
pk
: 데이터베이스의 각 레코드를 식별하는 기본키(Prmiary Key)
post.pk를 써서 기본키에 접근할 수 있고 같은 방법으로 Post객체내 다른 필드(title, author)에도 접근할 수 있다.
순서
1. 상세페이지 url 만들기
2. 상세페이지 뷰 추가하기
3. 상세페이지 템플릿 만들기
깃허브에 올릴 때는 반드시 settings.py
의 SECRET_KEY
를 분리하자!
분리하고 gitignore 에 시크릿키 파일 적어줘야 깃에 안올라간다.
시크릿키 분리 방법
Pythonanywhere
를 통해 배포하는데 깃에 있는 코드만 복사해서 썼더니 시크릿키가 없다고 떠서 한참을 고생했다. 😂
깃에는 시크릿키 파일을 안올렸으니 수동으로 Pythonanywhere
에 시크릿키를 업로드해줘야한다.
Pythonanywhere
를 통해 배포할 때, git의 코드를 pull하고 반드시 web tab에서 reload 버튼을 눌러줘야한다.
자동으로 반영되는게 아니라 꼭 버튼을 눌러줘야 반영된다. 이것때문에 noreversematch
에러가 떠서 한참을 고통속에 힘들어했다. 조심하자!