[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/WEB

django 기초 - form 태그로 POST하기

inu 2020. 8. 21. 15:18

home.html

<h1>학생 이름을 입력해보세요!</h1> <form action="{% url 'result'%}" method="POST"> ​​​​{% csrf_token %} ​​​​<input name="username" placeholder="이름"/> ​​​​<br/> ​​​​<br/> ​​​​<button type="submit">체크하기</button> </form>
  • form 태그의 POST로 form 태그 안의 데이터를 request 내부에 담아 보낼 수 있다.
  • {% csrf_token %}은 해당 POST 요청에 대해서만은 csrf token을 발급하고 체크하도록 해준다. (https://chagokx2.tistory.com/49)
  • action의 'result' url에 request을 보낸다.
  • button의 submit이 해당 기능이 해당 기능을 수행하겠다고 요청하는 버튼이 된다.
  • 물론 result라는 url로 보내는만큼 해당하는 url이 존재해야 한다.

urls.py

urlpatterns = [ ​​​​path('admin/', admin.site.urls), ​​​​path('', views.home, name = 'home'), ​​​​path('result/', views.result, name = 'result') ]
  • urlpatterns에 해당 url을 추가해준다.

views.py

def result(request): ​​​​name = request.POST['username'] ​​​​students = ['inu', 'james', 'bob'] ​​​​if name in students: ​​​​​​​​is_exist = True ​​​​else: ​​​​​​​​is_exist = False ​​​​return render(request, 'result.html', {'user_name': name, 'is_exist':is_exist})
  • request.POST 에 존재하는 'username' name에 존재하는 값을 가져온다.
  • 확인을 위해 students 리스트를 선언한다. (물론 models.py를 사용하는 것이 정석이지만 현재는 배우지 않았으므로 임의의 리스트를 따로 생성해서 확인해보겠다.)
  • students에 받아온 name이 존재하는지 확인해서 해당 불린값을 is_exist에 저장한다.
  • name과 is_exist를 render로 보낸다.
  • result.html 을 활용해야 하니 이 역시 생성해준다.

result.html

<body> ​​​​<h1>결과</h1> ​​​​{% if is_exist %} ​​​​​​​​{{user_name}}은 있어요! ​​​​{% else %} ​​​​​​​​{{user_name}}은 없어요! ​​​​{% endif %} </body>
  • django 문법을 활용해 위와 같이 조건문이나 반복문을 html 문서 내부에서 활용할 수 있다.
  • 단, endif(endfor, endwhile 등)을 꼭 작성해줘야 한다.

결과