바뀜

둘러보기로 가기 검색하러 가기
2,259 바이트 추가됨 ,  2021년 8월 20일 (금) 17:41
43번째 줄: 43번째 줄:     
= Form을 사용한 입력받기 =
 
= Form을 사용한 입력받기 =
 +
그냥 받기만 해선 받은 자료로 연산할 때 에러가 뜨기도 한다. 이를 위해선 form을 사용한 검증이 되면 편하다.
    
=== forms.py 만들기 ===
 
=== forms.py 만들기 ===
56번째 줄: 57번째 줄:     
=== 뷰 작성하기 ===
 
=== 뷰 작성하기 ===
<syntaxhighlight lang="python">
+
보통은 if함수로 <code>if request.method == 'POST':</code> 처럼 포스트 요청일때와 아닐 때를 구분하여 함수를 실행하는 게 일반적이다.<syntaxhighlight lang="python">
 
def compound_interest(request):
 
def compound_interest(request):
 
     #  폼을 통해 들어온 데이터를 받는다.
 
     #  폼을 통해 들어온 데이터를 받는다.
75번째 줄: 76번째 줄:     
=== 탬플릿 작성하기 ===
 
=== 탬플릿 작성하기 ===
 +
<syntaxhighlight lang="html+django">
 +
<form method="get" action="{% url 'utility:compound_interest' %}">
 +
    {% csrf_token %}
 +
    {{form}}
 +
    <input type="submit" value="버튼에넣을말">
 +
</form>
 +
</syntaxhighlight>위와 같이 작성할 수도 있지만, 에러메시지에 특화를 주고 싶거나, 속성마다 개별적인 HTML 코드를 부여하고 싶다면 다음과 같이 분리해 써넣을 수도 있다.
   −
= 자료 검증 =
+
폼의 기능을 모두 활용하려면 폼 안에서 라벨을 지정하는 것과 html속성을 지정하는 방법을 사용하는 게 좋지만, 다음과 같은 형태는 백엔드와 프론트엔드를 분리할 수 있다는 장점이 있다.<syntaxhighlight lang="html+django">
그냥 받기만 해선 해당 자료로 연산할 때 에러가 뜨기도 한다. 이를 위해선 form을 사용한 검증이 되면 편하다.
+
<!-----에러처리---------------------------->
 +
{% if form.errors %}
 +
    <div class="alert alert-danger" role="alert">
 +
    {% for field in form %}<!--모든 필드를 뒤지며 에러를 찾는다.-->
 +
    {% if field.errors %}
 +
    <strong>{{ field.label }}</strong><!--에러가 난 필드의 라벨에 굵음 처리-->
 +
    {{ field.errors }}<!--어떤 에러인지 보여준다.-->
 +
    {% endif %}
 +
    {% endfor %}
 +
    </div>
 +
{% endif %}
 +
 
 +
<form method="get" action="{% url 'utility:compound_interest' %}">
 +
    {% csrf_token %}
 +
    <label for="principal">얼마 넣을래?</label>
 +
    <input type="text" name="principal" id="principal"
 +
          value="{{ form.principal.value|default_if_none:'' }}">
 +
    <label for="interest_rate">이자율은?(단위는 %)</label>
 +
    <input type="text" name="interest_rate" id="interest_rate"
 +
          value="{{ form.interest_rate.value|default_if_none:'' }}">%
 +
    <label for="how_many">몇회 받아?</label>
 +
    <input type="text" name="how_many" id="how_many"
 +
          value="{{ form.how_many.value|default_if_none:'' }}">
 +
    <label for="additional">중간에 일정금액 투입해?</label>
 +
    <input type="text" name="additional" id="additional"
 +
          value="{{ form.additional.value|default_if_none:'' }}">
 +
    <p><input type="submit" value="Submit"></p>
 +
        <p>최종적으로 받는 금액은 {{result}}야.</p>
 +
</form>
 +
</syntaxhighlight>
 
[[분류:7-0. 장고 중급 튜토리얼]]
 
[[분류:7-0. 장고 중급 튜토리얼]]

둘러보기 메뉴