Django 복습

·2022년 10월 17일
0

TIL

목록 보기
25/46

<점프 투 장고> 책을 참고하여 장고를 복습했다. 이전까지는 맥북으로만 코딩을 했는데 이번에는 윈도우를 이용해 cmd, vscode로 복습했다.

장고 개발 흐름

1) 브라우저에서 로컬 서버로 페이지를 요청하면
2) urls.py 파일에서 url 매핑을 확인하여 views.py 파일의 함수를 호출하고
3) 호출한 결과를 브라우저에 반영한다

모델

글자수의 길이가 제한된 텍스트는 CharField를 사용한다.
글자수를 제한할 수 없는 텍스트는 위처럼 TextField를 사용한다. 작성일시처럼 날짜와 시간에 관계된 속성은 DateTimeField를 사용한다.
기존 모델을 속성으로 연결하려면 ForeignKey를 사용해야 한다. ForeignKey는 다른 모델과 연결하기 위해 사용한다.
원시 이진 데이터를 저장하려면 BinaryField를 사용한다.
이외에 DateField, EmailField, FilePathField, ImageField 등 여러개가 있다.

on_delete=models.CASCADE의 의미는 이 답변과 연결된 질문(Question)이 삭제될 경우 답변(Answer)도 함께 삭제된다는 의미이다.
👉 질문 하나에는 무수히 많은 답변이 등록될 수 있다. CASCADE 옵션은 질문을 삭제하면 그에 달린 답변들도 모두 함께 삭제한다.

☝️ 작성한 모델을 이용하여 테이블 생성을 위해 가장 먼저 해야 할 일은 앱을 config/settings.py 파일의 INSTALLED_APPS 항목에 추가하는 일이다.

생성한 테이블은 migrate한다.
python manage.py makemigrations
python manage.py migrate

태그 설명

예)

{% if question_list %}
    <ul>
    {% for question in question_list %}
        <li><a href="/pybo/{{ question.id }}/">{{ question.subject }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>질문이 없습니다.</p>
{% endif %}

{% if question_list %} : question_list가 있다면
{% for question in question_list %} : question_list를 순회하며 순차적으로 하나씩 question에 대입
{{ question.id }} : for문에 의해 대입된 question 객체의 id 번호를 출력
{{ question.subject }} : for문에 의해 대입된 question 객체의 제목을 출력

  1. 분기
{% if 조건문1 %}
    <p>조건문1에 해당되는 경우</p>
{% elif 조건문2 %}
    <p>조건문2에 해당되는 경우</p>
{% else %}
    <p>조건문1, 2에 모두 해당되지 않는 경우</p>
{% endif %}
  1. 반복
{% for item in list %}
    <p>순서: {{ forloop.counter }} </p>
    <p>{{ item }}</p>
{% endfor %}
  1. 객체 출력
{{ 객체 }}
{{ 객체.속성 }}
  • 장고 제네릭뷰
    목록 조회나 상세 조회 같은 특정한 패턴이 있는 뷰를 작성할 때 늘 비슷한 내용을 입력하기 때문에 이것을 패턴화하여 간략하게 만든것.
    만약 views.py에 작성한 index나 detail함수를 제네릭 뷰로 변경하면 다음처럼 간략하게 작성할 수 있다.
class IndexView(generic.ListView):
    def get_queryset(self):
        return Question.objects.order_by('-create_date')


class DetailView(generic.DetailView):
    model = Question

IndexView 클래스가 index 함수를 대체하고 DetailView 클래스가 detail 함수를 대체한다. IndexView는 템플릿 명이 명시적으로 지정되지 않은 경우에는 디폴트로 모델명_list.html을 템플릿명으로 사용한다. 마찬가지로 DetailView는 모델명_detail.html을 디폴트 템플릿명으로 사용한다.

제네릭 뷰 사용을 위해 (앱)/urls.py 파일은 다음과 같이 변경되어야 한다.

from django.urls import path
from . import views

app_name = '(앱 이름)'
urlpatterns = [
    path('', views.IndexView.as_view()),
    path('<int:pk>/', views.DetailView.as_view()),
]

HTTP 주요 응답코드

200 성공 (OK)
500 서버오류 (Internal Server Error )
404 서버가 요청한 페이지(Resource)를 찾을 수 없음 (Not Found)


처음 강의자료로만 부트스트랩을 접했을 때와 달리
장고 템플릿을 공부하면서 느낀 부트스트랩의 유용성은 훨씬 편리하다 느꼈다
더 많은 부분을 성실히 공부했으면 좋겠지만
코로나 후유증으로 심해진 천식으로 자주
병원에 가야하고 졸업 기준 충족윽 위해 기타 생활을 하는 나에게는
조금 벅찬 거 같기도 하다. (오롯이 내 욕심에 한해서)


템플릿을 공통으로 사용하는 부분에는 base로 취급해 따로 html을 구분하라는 조언에 힘입어 더 높은 이해를 도모할 수 있었다. 이는 기타 다른 자료를 찾아보아도 조언을 받은 바와 같이 동일한 조언을 얻을 수 있었다.

수업 자료 외의 학습에 도움될 만한 자료를 찾을 결과,
페이징, 템플릿 필터, 답변 개수 표시, 모델 변경, 글쓴이 표시 (아마 login 회원 전용으로 받는) 및 수정과 삭제 등의 참고 방법을 배울 수 있었다.

머신러닝 심화(딥러닝)를 이번 주에 더 학습하지 못해 아쉽지만 주변 조언에 맞게 장고를 이용한 댓글, 게시글 보기 등의 기본 기능을 더 익히 배우고 싶었고 아직 더 부족하지만 머신러닝에 익숙해지고 싶었다.

물론 아직 더 깊이 학습하지 못한 부분이 분명하지만
시간이 가능한 만큼, 채우지 못한 영역을 더 학습하고 싶다.

아직 여유가 온전치 않음을 느끼지만 최소 다음 주에는 저번 팀 프로젝트에서 구현하지 못했던 인스타그램 피드 기능을 완전히 구현하고 싶다.

0개의 댓글