관리 메뉴

A seeker after truth

django 공부 도중 모르는거 검색한 내용+ 기억하기 위한 기록(1): 투표 사이트 튜토리얼 본문

Programming Language/Python

django 공부 도중 모르는거 검색한 내용+ 기억하기 위한 기록(1): 투표 사이트 튜토리얼

dr.meteor 2020. 1. 11. 19:43

공부한 서적은 <장고로 쉽게 배우는 배프의 오지랖: 파이썬 웹 프로그래밍>(디지털북스, 2019)에서 투표 사이트 만들기 튜토리얼.

처음 공부할 땐 내용이 눈에 잘 들어오지 않았는데 두 번 하니까 훨씬 이해 잘되더라.

코드: https://github.com/secureWKkim/my1stDjangoStudy

 

 

<검색 내용>

1. ForeignKey(on_delete.CASCADE)에서 on_delete.CASCADE 의미

cascade는 it에서는 직렬, 종속, 일렬 이란 뜻으로 나온다. 그래서 데이터베이스에서 삭제 작업을 할 때 한 가로줄이 삭제되게 하는 설정일 거라고 생각했는데 정확했다.

좀더 자세하게 나온 자료: https://lee-seul.github.io/django/backend/2018/01/28/django-model-on-delete.html

 

2. django.timezone.now()

현재 시간을 가지고 옴.

 

3. python의 datetime 모듈의 timedelta 객체

https://docs.python.org/ko/3/library/datetime.html#timedelta-objects

https://python.bakyeono.net/chapter-11-3.html

여기 나오긴 하는데 무슨 말인지 잘 모르겠음...

 

4. 하드 코딩의 의미

데이터를 코드 내부에 직접 입력하는 것. 그니까 뭐 파일이나 데에 이런게 아닌 경우를 말하는 거겠지. 아래 내용 모두가 유익해서 나중에 생각나면 몇 번 더 읽어보면서 개념 익숙해져도 좋겠다.

https://namu.wiki/w/%ED%95%98%EB%93%9C%EC%BD%94%EB%94%A9

장고 공부에서는 왜 나왔던 것이냐면, index.html에서 상세 페이지로 이동하기 위한 링크 주소가 하드코딩되어 있었다는 것이다.

href 속성값을 직접 써주는 방식으로 하면, 나중에 주소를 polls가 아닌 다른 형태로 바꾸고 싶을 때 html을 직접 다 열어서 바꿔야 한다는 불편함이 있다. 그래서 url 템플릿 태그를 사용해서 바꾸라는 내용이다.


<기록 내용>

1. polls/urls.py에서

urlpatterns = [
# ex: /polls/
path('', views.index, name='index'),
# ex: /polls/5/
path('<int:question_id>/', views.detail, name='detail'),
# ex: /polls/5/results/
path('<int:question_id>/results', views.results, name='results'),
# ex: /polls/5/vote/
path('<int:question_id>/vote/', views.vote(), name='vote'),
]

화살 괄호 <>는 변수를 의미한다. 이 부분에 해당하는 값을 뷰에 인자로 전달한다. 적어두면 기억에 더 잘 남고 뒷내용 이해할 때도 도움될 것 같아서 기록

 

2. django.shortcuts의 render 메서드

return HttpResponse(template.render(context, request) )에서 HttpResponse에 해당하는 과정을 생략해줌.

loader -> render로 축약 가능

return render(request, 'polls/index.html', context) 로 바뀜. 두 번째 인자가 템플릿에 해당하고.

 

3. Http404 과정을 단축하는 함수는 get_object_or_404 함수다.

 

4. url namespace

네임스페이스는 분리된 경로를 만드는 개념인데, 예를 들어 detail이란 주소 이름을 가진 뷰가 polls에도 있고 또 다른 앱에도 있을 경우 장고는 어느 뷰의 url을 만들지 알 수 없다. 그래서 이런 경우 네임스페이스를 설정해 각각의 뷰가 어느 앱에 속한 것인지 구분하도록 할 수 있다. 필수로 설정할 필요는 없지만 프로젝트가 복잡해질수록 네임스페이스가 있는 것이 편리하다. polls/urls.py에 설정한다. 그리고 index.html에서 하드 코딩이라고 url 태그로 고쳤던 부분의 'detail' 앞에 polls:만 붙여주면 된다.

 

5. 제네릭 뷰

는 장고에서 미리 준비한 뷰를 말한다. 웹 플밍에 일반적으로 사용되는 뷰들은 이미 장고에서 대부분 만들어 뒀다. 이것들을 사용하면 코드를 적게 사용하고 기능들을 빠르게 완성할 수 있다.

 

6. static 파일 사용하기

css, js 같은 파일을 말함. 이런 파일을 사용하려면 static 폴더를 만들고 그 안에 파일을 저장한 후 사용할 수 있다. 


<HTML> 내용은 따로 기록. 본인은 생활코딩으로 html 공부를 좀 하긴 했지만 외우진 않아서 어렴풋이만 기억하는 상태, 또한 고급 내용도 TCPSchool 사이트로 조금 공부한 수준. css는 아예 모름. 문제는 저번에 공부해보니까 생활코딩이나 TCPSchool에 안 나와있는 문법이 자꾸 나오는거 봐서 장고만의 문법이 따로 있는 건가 싶기도 하고... 이 부분 어렵고 답답하다.

 

1. ul, li 태그

unordered list, list item의 약자.

좀 더 자세한 자료:https://developer.mozilla.org/ko/docs/Web/HTML/Element/li

 

2. p 태그

paragraph의 줄임말. 단락.

 

3. a태그와 href

a는 문서를 링크시키기 위해 사용하며, href는 문서를 링크시키기 위해 존재.

http://www.tcpschool.com/html/html_basic_links

 

4. form, input

form action="", method=""

의 양식으로 돌아가는데, action의 경우 처리할 페이지 정보를, method는 http 메서드를 정하는 부분이다.

http://www.tcpschool.com/html/html_input_forms

http://www.tcpschool.com/html/html_input_inputAttr

input value의 세 가지 속성: https://dasima.xyz/html-input-value/

 

5. 장고 템플릿 문법이 따로 있는 게 맞았다!!! html과 별개로 장고 고유의 문법이라고 한다. 자세한 내용은 아래 링크.

https://cupjoo.tistory.com/100

중에서 csrf_token 부분은 csrf 공격을 막기 위한 수단 중 하나로서, 방금 서버에서 들어온 요청이 사이트 내부에서 온 것이 맞는지 확인하는 용도라고 한다.(해커가 만든 외부 사이트에서 우리가 만든 사이트에 로그인 한 사용자 권한으로 공격하는 것을 막기 위함)

 

6. get_object_or_404에서 pk=?

primary key의 약자. 같은 클래스로부터 객체들이 태어날 텐데, 우리는 그것들을 구분할 방법이 없다. 그래서 그 녀석들을 구분할 수 있게 해주는 인식표 를 달아주는 값!

https://egg-money.tistory.com/101