잊기

[python, django] django(장고) application 개발(2) View, Template 본문

Python _ Django

[python, django] django(장고) application 개발(2) View, Template

잊기 2023. 2. 24. 14:54

HTML 작성시 DJANGO 문법

  • html + 파이썬코드 (템플릿 태그)
         {% 파이썬코드 %}
  • Template변수 (템플릿 변수) 
         {{ 변수 }}
  • filter
         {{ 변수명 : filter }}
  • 주석
         {# 주석 }

UI를 위한 templatates 폴더 생성 후 안에 polls 폴더 생성 ( templates > polls )

=> html파일명이 겹쳐도 앞에 폴더명으로 구분하기 위해서 내부폴더 추가 생성

      ex) polls.index.html  /  dolls.index.html (namespace)

 

View 와 Template

url mapping - URL : view = n : 1 이 가능하며, URLconf 라고 함 ( urls.py )

URLconf - view - template / URLconf - template - view 순서로 코딩

 

  • URLconf ( urls.py )
urlpatterns = [
    path('admin/', admin.site.urls),
    path('polls/', include('polls.urls'))
]

# path, admin모듈 : 장고제공, views모듈 : URL스트링 매칭시 호출되는 뷰함수
# 일정한 형식이므로 그대로 코딩, 위에서 아래로 진행하기에 순서는 주의
# path() 에서 URL 작성시 '/'를 뒤에만 붙이는것을 권장


app_name = 'polls'
urlpatterns = [
    path('', views.index,name='index'),
    	# /polls/ 매칭시, views.index(request) 함수 호출
    path('<int:question_id>/', views.detail, name='detail'),
    	# /polls/[i] 매칭시, views(request) 함수 호출
        # <> 부분이 정수(int)이면 매치, 매치된 문자열을 question_id에 할당
]

# app_name을 부여 재사용, 수정이 용이하게 사용 (권장)
# app_name 변수가 같아도 클래스가 다르므로 class1:polls , class2:polls로 구분됨 (namespace)
# name :  URL패턴별로 이름 부여, 탬플릿 파일에서 사용
  • path 객체 작성 
    - path ( 'polls/', views/index(request) )
    - path ( 'questions/, <int : question_id>/', views.question_id )  
             -> views.py 에서 변수 question_id 를 생성, 넘겨줘야 사용 가능
  • url patterns -
    path('polls/', include('polls.urls')) => URL이 polls 라면 polls 폴더의 urls.py 파일 참고
    url 'polls:vote' question_id           => polls와 vote 사이에 question_id 를 넣어 반환 ( /polls/question_id/vote/ )
  • include() 함수 : 다른 앱의 URLconf를 연결하는(참조시키는) 역할 

 

  • View 함수 작성 ( templates / 폴더명 / '파일명.html' 생성 )

index.html&nbsp; HTML문서에 Python 언어를 사용

  • HTML 문서에서 파이썬 언어를 사용할 때, {%  %} 를 사용
    - {% for ~ in ~ %}               {% endfor %}
    - {% if ~ %}                        {% endif %}
  • html 파일을 작성하면서 필요한 변수 확인 => view.py에서 생성 , 넘겨받아야 함
  • view 함수
    - 템플릿에게 넘겨줄 객체를 생성, 정의
    - html 템플릿 파일의 충돌을 방지하기 위해 templates > app이름(폴더) 으로 생성하여 사용
    - 사용자에게 보여줄 최종 html 텍스트를 담아 HttpResponse객체를 반환

함수 작성에 필요한 클래스&nbsp; import, HttpResponseRedirect 객체를 반환

  • form 태그 : 서버의 데이터를 변경하는 경우 POST방식을 사용, form action 속성에 url 태그를 사용하여 지정
                    form 태그 사용시 장고가 제공하는 {% csrf_token %} 태그를 넣어줌 ( 피싱공격 방지 태그)

  • question.choice_set.all( ) : Question 객체의 choice_set (PK = FK)로 연결된 모든 항목
    question.choice_set.all( )[ : n ] - 갯수등 추가 제한식 사용 가능
  • forloop.counter 변수 : for문이 실행된 횟수를 담고있는 변수
  • get_object_or_404( ) : Question 객체의 pk로 연결된 모든 항목조회, 객체가 없으면 404 익셉션 발생

 

 

 

 

 

 

admin page, polls 폴더에 Questions, Choices 컬럼이 생성됨