일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 한 번에 끝내는 AWS 인프라 구축과 DevOps 운영 초격차 패키지 Online
- Avast Security
- aws s3
- gitlab 잔디옮기기
- redis cli
- 잔디이전
- AWS S3 버킷 삭제
- 패캠챌린지
- 직장인인강
- nodemailer
- 캐시백챌린지
- AWS S3 migration
- 패스트캠퍼스후기
- 캐시백
- ERR unknown command 'JSON.GET'
- vscode
- 환급챌린지
- Redis
- 직장인자기계발
- RedisJSON
- aws
- 패스트캠퍼스
- redis-cli
- Window redis-cli
- elastic cache
- putty Inactive
- AWS S3 계정이동
- Ngrinder Docker
- Avast 구독취소
- ERR unknown command 'JSON.SET'
- Today
- Total
Developing
패스트캠퍼스 캐시백 챌린지 19일차 본문
포스팅을 위해서 django tutorial polls app 만들기 마지막 파트클립을 복습하고 새 클립을 수강하는 식으로 챌린지를 진행하였다. 진자언어도 처음에는 괴상하게 생겼다고 생각했지만 쓰다보니 어느정도는 적응이 된 것 같다. 다음 포스팅은 polls app파트로 장고에 관해서 light하게 이해한 것을 바탕으로 Order app의 모델설계에 대한 포스팅을 하게 될 것이다.또한 Insomnia같은 tool에 대해서도 다룰예정이다. 한편 Order app쪽은 rest framework 초기에 프로젝트에 반영할 문제생긴 것 말고는 아직까지는 순조롭게 잘 진행되고있다..
Polls App 만들기 (3)
index.html 에서 url이 “/polls/{{question.id}}/” 처럼 하드 코딩이 되어있는데, 이것의 갯수가 많다고 가정하면 url이 바뀔때마다 일일이 바꾸어주어야 하는 번거로움이 있다.
polls/urls.py에서 이렇게 name으로 이름을 부여를 해준 것을 가지고 각 url의 이름으로 진자템플릿에 표현을 해보자!
- 기존
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
- 변경 후
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
이렇게 url의 name을 활용할 수 있다.
지금은 polls app 하나이지만, 여러 app의 url 공간임을 구별해주기 위해서는 urls.py 에서 app_name의 변수를 생성해준다.
이제 아까 적어준 내용 앞에 url name의 앞에 지정해준 appname을 설정해주면 된다.
이제 form을 활용해볼 것인데, detail.html을 다음과 같이 변경해준다.
<form action="{% url 'polls:vote' question.id %}" method="post">
{% csrf_token %}
<fieldset>
<legend><h1>{{ question.question_text }}</h1></legend>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
{% for choice in question.choice_set.all %}
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}">
<label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br>
{% endfor %}
</fieldset>
<input type="submit" value="Vote">
</form>
각 choice에 대한 vote를 하면 해당되는 choice에 대한 데이터값이 1증가해주기 위해서 form tag를 활용한다.
이제 vote 함수에 대해서 db의 내용이 바뀌도록 작업을 해주어야한다.
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from .models import Choice, Question
# ...
def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
try:
selected_choice = question.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
# Redisplay the question voting form.
return render(request, 'polls/detail.html', {
'question': question,
'error_message': "You didn't select a choice.",
})
else:
selected_choice.votes += 1
selected_choice.save()
# Always return an HttpResponseRedirect after successfully dealing
# with POST data. This prevents data from being posted twice if a
# user hits the Back button.
return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))
post방식으로 request온 choice에 대해서 except가 발생하지 않으면 1이 증가하도록 작업해준다.
fom을 통해 response를 할때는 reverse 함수를 이용해준다.
선택을 하면서 django admin page에서 값이 변환되는 것을 확인할 수 있다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
*본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'Devops > Fastcampus 캐시백 챌린지' 카테고리의 다른 글
패스트캠퍼스 캐시백 챌린지 21일차 (0) | 2022.05.08 |
---|---|
패스트캠퍼스 캐시백 챌린지 20일차 (0) | 2022.05.07 |
패스트캠퍼스 캐시백 챌린지 18일차 (0) | 2022.05.05 |
패스트캠퍼스 캐시백 챌린지 17일차 (0) | 2022.05.04 |
패스트캠퍼스 캐시백 챌린지 16일차 (0) | 2022.05.03 |