Django Basics - URL and View

진성·2022년 9월 26일
1

Django해보장고

목록 보기
2/6
post-thumbnail

0. Security Issue

  1. 지난 의 말미에 Github에 Repo를 판다는 이야기를 했다. 순진무구하게 .gitignore를 간단히 작성하고 싹다 Public Repo에 Push했다.

  2. 그랬더니 낮에 GitGuardian이 Django 개발 시 사용되는 Secret Key를 내가 공공연하게 노출시켰다고 이메일을 보내줬다.

  3. settings.py를 확인해보니 Line 32에 SECRET_KEY = "ExposedSecretKey" 코드가 떡하니 보이는 것이었다.

  4. 일단은 secret.txt라는 파일에 키를 옮겨 적어두고, .gitignore에 추가해준 뒤, 다음과 같이 수정했다.

	with open("secret.txt", "r") as f:
		SECRET_KEY = f.read()
  1. 그렇지만 부끄러운 Commit History를 보면 모든 것이 공개되어있다. 솔루션은 항상 있는 법.
git checkout --orphan latest_branch
git add -A
git commit -am "Commit w/o secret key"
git branch -D master
git branch -m master
git push -f origin master
  1. Commit history가 없는 Orphan branch를 만든 뒤, master를 없애주고 다시 Orphan을 master로 만들어준다. 박응용 선생님께서는 Source code에 따로 처리를 안해두신 것 같은데, 나처럼 바꿔두어도 별 문제 없지 않을까 싶다. 문제가 생기면 그때 확인해보자.

  2. 라고 하기가 무섭게 문제가 생겼다. python manage.py runserver를 하면, secret.txt를 찾지 못한다. 공식 문서를 보면 이유를 알 수 있다. open()은 현재 working directory를 기준으로 경로를 처리하기 때문이다. manage.py는 더 상위의 경로에 있으므로, "config/secret.txt"로 경로를 바꿔서 해결했다.

1. Django App

  1. App은 프로젝트의 기능을 나누는 단위이다.

  2. django-admin startapp pybo를 통해서 게시판 기능을 담당하는 pybo app directory가 생성되었다.

  3. server를 실행시키고, pybo 페이지에 들어가면, error가 난다. 아직 Mapping이 안되었기 때문.

2. URL and View

  1. Django에 특정 페이지를 url을 통해 요청하면, urls.py의 urlpatterns의 매핑을 이용해 서버에서 실행 결과를 브라우저에 반영한다.

  2. 일반적으로 View 함수를 호출해서 해당 페이지를 결과로 반환하게 된다.

  3. 책에 나온 그림은 다음과 같다.

  4. urlpatterns = [path('pybo/', views.index),] pybo 페이지를 요청하면 views의 index 함수를 통해 결과를 출력하게 되는 코드이다.

3. URL 분리

  1. 위와 같이 urlpatterns를 설정해두면, mapping에 변경사항이 생길 때마다 config까지 와서 바꿔줘야 하므로, 비효율 적이다. Project 전체의 연결을 담당해야하니, App 내부의 local한 변화는 App directory 내에서 다뤄주고, config는 이에 Robust한 것이 좋을 것이다.

  2. 이를 위해 URL을 분리한다. config.urls 단에서는 pybo 페이지에 대한 Request를 받으면, pybo.urls의 mapping 정보를 통해 처리하게 include를 써준다.

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
	path('admin/', admin.site.urls),
    path('pybo/', include('pybo.urls')),
]
  1. pybo.urls는 다음과 같이 구성한다.
from django.urls import path
from . import views

urlpatterns = [
	path('', views.index),
]
  1. config.urls의 경로였던 'pybo/'에 pybo.urls의 경로인 ''가 더해져, 'pybo/'를 요청하면, views.index가 실행되는 것이다.

  2. 커밋, 푸쉬 하고 끗

profile
어려운 건 꾸준히, 재밌는 건 빠르게

0개의 댓글