일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 재귀
- 자료구조
- CSRF
- URL 별칭
- ChatGPT
- 템플릿
- 가상환경
- 네임스페이스
- 스택
- 데이터 시각화
- 챗지피티
- 글쓰기
- Django
- HTTP
- 워드클라우드
- 네트워크
- 일기
- 장고
- seaborn
- 이분탐색
- Seabron
- 클라이언트
- 웹
- 웹페이지
- Templates
- 연결 리스트
- 서버
- 웹사이트
- 인터넷
- AI
- Today
- Total
목록장고 (Django) (43)
터칭 데이터

투표를 고민하는 와중에 선택지사 삭제되었다면? 우리가 지난 시간 아무 것도 선택하지 않을 때는 KeyError가 일어나니 이를 try~except로 방어해줬었습니다. 그런데 Choice.DoesNotExist도 같이 에러 방어 코드로 작성해줬는데 왜 그랬을까요? question의 상세 페이지에 들어가 투표할 때는 무조건 존재하는 choice들만이 선택지로 제공될텐데 굳이 저렇게 Choice.DoesNotExist까지 방어 코드로 작성할 필요가 있을까 의문이 드실 수도 있습니다. 그런데 한 가지 상황을 가정해 보겠습니다. 만약 우리가 위와 같이 선택지를 고민하고 있는 와중에 커피라는 선택지가 DB에서 삭제된다면 어떻게 될까요? 그리고 그 상황에서 우리가 커피를 선택하고 Vote 버튼을 눌러 투표를 했다면 ..

투표기능을 만들자 지금까지 우리가 작성한 상세 페이지는 해당 question의 choice가 무엇이 있는지 조회만 해볼 수 있었는데요. 이제는 question의 상세 페이지에서 choice를 직접 선택해 투표할 수 있는 기능을 만들어봅시다. 먼저 브라우저에서는 위와 같이 뜨는 투표창을 만들었습니다. 위와 같은 투표창을 만들기 위해 detail.html 템플릿에서 아래와 같이 코드를 작성했습니다. 갑자기 코드가 늘어났죠? 하나하나 설명해드리겠습니다. 먼저 빨간색 박스 action은 form에 입력된 데이터가 서버의 어떤 URL로 도착할지 적는 곳입니다. 현재는 실습의 초기단계기 때문에 일부러 #을 써서 비워뒀습니다. 파란색 박스 input 태그의 value는 대개는 초기값을 나타냅니다. 예를 들어 inpu..

404에러는 사용자가 웹 사이트에 존재하지 않는 URL을 요청하면 띄우는 에러입니다. 존재하는 question id 3번 대신 1000번을 입력하면 에러가 뜨는데 polls 앱의 views.py 파일의 위와 같이 음영처리된 코드를 실행하다 에러가 발생했다고 합니다. >>> question = Question.objects.get(pk=1000) Traceback (most recent call last): # (생락...) polls.models.Question.DoesNotExist: Question matching query does not exist. 쉘에서 코드를 똑같이 입력해보면 입력된 1000으로 Question의 id를 찾지 못했다는 뜻인데요. 개발자 도구 Network에서도 자세히 살펴보면..

우리의 상세(detail)페이지 제작 단계는 크게 2가지였습니다. 1. URL에 Quetions ID를 입력시 해당 Question의 상세 페이지로 접속하도록 구현하기 2. question 제목들이 나열되어 있을 때 특정 제목을 클릭하면 해당 question의 상세페이지로 가는 링크 만들기 우리는 바로 이전 시간 1단계 구현을 마쳤습니다. 이번에는 2단계를 구현할 것입니다. 제목 클릭시 상세 페이지로 이동하는 링크 추가 제목을 클릭시 해당 제목의 상세 페이지로 이동했습니다. 태그를 이용 뷰(polls/views.py)에서 context로 건네 받은 questions의 쿼리셋 요소들인 question에 반복문으로 하나씩 접근하면서 해당 question의 제목을 보여주는데 그 제목에 a 태그로 링크를 걸어 ..

만들 상세 페이지의 예시 프로그래머스 질문 페이지와 같이 제목들을 클릭하면 첫번째, 상세 내용이 나오도록 두번째, ID 번호를 URL에 입력시 그 ID에 해당하는 question의 상세 내용을 볼 수 있도록 하고자 합니다. URL에 입력되는 ID번호에 따라 다른 페이지 보여주기 URL에 관한 업무이니 먼저 polls/urls.py를 손봅니다. 'polls/' 뒤에 숫자(ID)가 들어온다면 뷰(views)의 디테일(detail) 메서드에서 처리한다는 path를 urlpatterns에 추가합니다. 그런데 여기서 를 잘 기억해주세요. 뷰의 detail 메서드에서는 urls.py에서 넘겨준 question_id를 인자(파라미터)로 받아 HttpResponse로 출력하도록 합니다. 이제 브라우저에서 실행결과를 살..

템플릿에 for (제어)문으로 여러 데이터 출력하기 지난 시간 우리는 Question 모델에 있는 여러개의 질문들 중에서 가장 최근 질문 하나만 가져와서 index.html에서 출력했습니다. 그런데 템플릿에 여러개의 데이터를 출력하려면 어떻게 해야할까요? 먼저 장고 쉘(Django Shell)에서 살펴보겠습니다. >>> from polls.models import * >>> latest_question_list = Question.objects.order_by('-pub_date')[:5] >>> latest_question_list >>> for question in latest_question_list: ... print(question.question_text) ... new question 휴가를..

뷰(Views) 지금까지 우리는 모델을 이용해 데이터 베이스를 객체화해 다루고 이를 장고 쉘(Shell)에서만 다뤄봤는데요. 장고 뷰는 모델로 읽어온 데이터를 활용해 보여주는 곳입니다. 헷갈리거나 잊지 않기위해 우리는 지금 DjangoProjects 가상환경의 mysite 프로젝트의 polls 앱을 다루고 있습니다. views.py로 모델의 데이터들 보여주기 http://127.0.0.1:8000/polls/index 라는 URL을 입력하면 브라우저에서 Question 목록이 뜨도록 하려고 합니다. 그 전에 지난 시간 우리가 장고 서버에서 URL 경로를 어떻게 지정했는지 복습겸 다시 살펴보겠습니다. mysite/urls.py입니다. mysite 프로젝트 전체를 관장하는 mysite 디렉토리의 urls.p..
한줄 요약: 필요해서.. https://stackoverflow.com/questions/46383210/why-view-functions-require-a-request-parameter-in-django Why view functions require a request parameter In Django? Example from Django documentation: def index(request): return HttpResponse('hellworld!') def detail(request, question_id): return HttpResponse("Question: %s" % questi... stackoverflow.com 좋은 내용이라 정독할 것을 권장하지만 바쁜 사람들을 위해 최대한 ..

모델 메서드 우리가 지금까지 쉘에서 사용했던 save()는 모델 메서드입니다. 쉘에서 메모리상으로 남아있던 작업을 DB 테이블에 적용하는 메서드였는데요. 우리가 save() 메서드를 사용할 수 있었던 것은 우리가 models.py에서 모델 클래스를 정의할 때 model 라이브러리의 Model을 상속받았기 때문입니다. 우리는 지금까지 이 Model에 있는 save() 메서드를 사용했던 것입니다. 모델 메서드 직접 만들기 장고에서는 우리가 사용할 모델 메서드들을 직접 손수 정의해서 사용할 수 있습니다. Question에 대해서 최근에 생성된 question인지 알아보는 메서드를 구현해 보겠습니다. 24시간 내에 만들어진 최근 question인지를 판단해주는 메서드 was_published_recently를 ..

학습에 앞서 먼저 학습에 앞서 위와 같이 choice들이 어떤 question에 대한 것인지 쉽게 알아볼 수 있도록 polls/models.py에서 class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0) def __str__(self): return f'[{self.question.question_text}] {self.choice_text}' # 이곳을 수정 와 같이 __str__의 내용을 수정해주도록 합시다. 그리고 학습을 위해 위와 같이 ..