Python/Jabbok

2021. 03. 10. Pybo 따라하기

씬프 2021. 3. 10. 12:34
반응형

Django 동작 방식

먼저, 접속을 시도하면 Root urls에서 매칭시키고, Root urls에서 매칭된 상황에 따라 해당 urls 파일로 Request를 던져준다. 그러면 urls에서 나머지를 매칭시켜서 view로 연결함.

 

Django templates

App 내에 templates라는 하위 디렉터리를 통해 템플릿을 관리한다. Flaskrender_template 함수를 통해 template에 접근하지만, Django에서는 loader라는 모듈을 통해, loader.get_template()로 템플릿을 호출한다. 그리고 결과값에 HttpResponse(template.render(context, request))Request에 대한 Response를 전달한다. Context는 전달되는 변수, 내용이 담겨 있다.

다른 방식으로 HttpResponse가 아닌 render()를 사용해서 결과값 전달도 가능하다. “render(request, ‘{{templates name}}’, context)” Template loader도 쓰지 않는다.

# templates name에 공식 문서에는 app/html과 같은 형식으로 되어있으나, 404 Error가 발생함. 내용을 살펴보니 templates 디렉터리 내에 app 디렉터리 그 안에 html 파일을 찾고 있었음. 그래서 render 함수에 전달되는 template namehtml파일 이름만 전달하니 해결되었음.

 

# Flask에서는 DB를 건드릴 때마다 upgrade, migrate를 계속 했는데?

 

404 error 일으키기

Http404를 통해 404 error를 일으킬 수 있다. 이 때 예외처리 (try except를 사용해야함.) 하지만 get_object_or_404()를 통해 해결하면 편리하다. 예외처리 안해도 됨. 정말 너무 편리하다.

 

template에서는 template code

{% %}, {{ }} 사용하면 편리하게 python code를 사용함.

 

Form 작성

POST method를 사용한다. 성공적으로 data가 전달되었다면 HttpResponseRedirectreturn 한다. “reverse()” 함수를 통해 URL의 하드코딩을 피하고 파라미터에 따라 전달되도록 함. Request.POST[‘choice’]choice라는 name을 가진 값에 대해 POST된 값을 확인하고 데이터가 없다면 KeyError를 일으킴. 값이 제대로 오지 않았다면 POST 될 수 없도록 해야 함.

 

Generic view?

URL 파라미터에 따라 DB에서 데이터를 얻어와 템플릿을 로딩하고 렌더링하는 것. 무조건 좋기보다 경우에 따라 사용하는 것.

 

 

이제 저번에 부탁 받았던 웹 소설, 툰 커뮤니티를 만들어보자.

막상 시작하니 무엇부터 해야할 지 생각 이상으로 막막하다.

그래서 어떤 페이지가 필요할지, 그리고 각 페이지마다 어떤 DB field가 필요할 지 정리했다.

하지만 처음부터 완벽한 사이트를 만들기보다 구조를 짜야겠다는 생각이 들었다.

점점 필요한 것을 추가하며 리팩토링할 계획이다.

 

먼저는 홈 화면, 그리고 웹툰 리스트, 웹툰 디테일, 웹소설 리스트, 웹소설 디테일 페이지를 구조화하자.