오늘 학습 내용
Blog
가상환경 설정 및 포에트리,장고 설치

- poetry add django == 5.0.4 : 버전 고정 설치
- poetry add django ~= 5.0 : 5.0버전에서 최신버전 설치
- pyenv virtualenv 3.12.1 oz_blog
- poetry init : poetry 설정 / poetry add django : django 설치
Django 설정

-
poetry add ipython
- python manage.py shell
- ipython — 더 똑똑한 파이썬 쉘
- 기본 Python shell 보다 기능이 훨씬 많아서 장고 shell에서 테스트할 때 매우 편함

-
poetry django-extensions
- Django 개발 보조 확장: Django 개발 시 편리한 명령어들을 추가해줘서 생산성이 올라감
- python manage.py shell_plus
- 자동 import shell
- 모든 models 자동 불러오기 (매번 from app.models import User 안 해도 됨)
- python manage.py show_urls
- python manage.py graph_models -a -o erd.png
- 모델 구조 그림으로 만들기 = ERD 이미지 생성
마이그레이션
- python manage.py migrate
- Django 프로젝트에서 필요한 데이터베이스 테이블을 생성하고, 데이터베이스 구조를 초기화
- runserver 했을때 뜨는 빨간색 경고 없어짐

- python manage.py makemigrations
- 마이그레이션 파일 생성(git 의 commit 느낌)
- python manage.py migrate
블로그 목록 페이지 만들기
admin
- python manage.py createsuperuser



- getcategory_display = get컬럼명(choices를 만든)_display()
- 원래는
[free] 가 나와야 하지만 [자유] 가 나오도록 변경
- def str(self)
- 원래 제목이 기본적인 영어 제목이 되어야 하지만 제목의 노출형식을 설정
- 'choices=' 이거 때문에 CharField 임에도 선택박스가 나오는 것

블로그 상세 페이지 만들기

- get_object_or_404: 없는 아이디값을 출력하면 404 반환


사용하기 편하게 개선 = 동적으로 만들기

<a href="{% url 'blog_detail' blog.pk %}">
- url이라는 템플릿 함수가 django urls.py에서 이름이 blog_detail을 가진 path를 찾음
- blog.pk
- 꼭 이름이 pk가 아니라 id여도 가능, 이름으로 받는게 아니라 위치인자로 받음
path('blog/<int:pk>/', views.blog_detail,name='blog_detail')
- 여기서 첫번째 인자로 들어오는 숫자를 그냥 blog.pk가 받는것

- 추가로 받는 값이 없기 때문에
<a href="{% url 'blog_list' %}">
쿠키와 세션
- 사용자 식별, 행동 정보 기억을 위해 필요
- 매번의 요청은 독립적인 사건이기 때문에 기억해야할 정보를 함께 요청하는 작업이 필요
쿠키
- 유저단에 정보 저장 (클라이언트)
- 텍스트
- 브라우저에 저장되기 때문에 외부 유출에 취약
- 보안등급이 높은 정보는 쿠키에 저장할 수 없음
- 종료 시점을 설정할 수 있고, 미설정 시 브라우저 종료와 동시에 쿠키도 소멸됨
- 한 도메인당 20개, 쿠키 하나당 4KB로 총 300개의 용량 제한이 있음
세션
- 보안상 브라우저에서 갖고 있을 수 없는 중요 정보를 저장할 수 있다.
- 서버에 저장됨
- 서버는 쿠키가 가진 key와 매핑된 value를 딕셔너리 형태로 저장. (Object형)
- 브라우저가 쿠키의 key로 요청을 하게되면 서버에서는 key를 가지고 유저의 세션 정보를 파악할 수 있음
- 정확한 소멸 시점을 알 수 없음
- 서버가 허용하는 선에서 용량 제한이 없음
실습

- visits = int(request.COOKIES.get('visits',0)) +1
- get
- visits값을 key값으로 가져오고 Key값이 None일 경우에 디폴트로 지정해준 0을 사용
- return 되는 값이 str이기 때문에 int로 변환
로그인 페이지 만들기
Django Authentication 공식문서
로그아웃 페이지 만들기

Signup 페이지 만들기
- app는 모듈화가 가능하도록 만들어야 하기 때문에 회원가입 관련 App 생성
- python manage.py startapp member


코드 단순화
-
form = UserCreationForm(request.POST or None)
- post일 경우 post데이터가 들어가고 아닐경우 none데이터가 들어감

-
from django.conf import settings
- 장고가 실행되고 있는 환경에서 settings파일을 가져옴
- 만약 config폴더의 이름이 변경되더라도 알아서 찾아서 가져옴
-
from config import settings
Mini Project. Login 기능 직접 만들기

- redirect(reverse('blog_list'))
- from django.urls import reverse
- reverse: 이름을 가지고 어떤 url로 갈지 찾아줌
- config/urls.py 에서 blog_list라는 이름을 가진 url을 찾고 redirect
새로운 지식
- templates/blog_list 이렇게 생성하면 자동으로 폴더까지 생성됨
- Pycharm에서 모듈을 자동으로 import 하기위해서 : option + Enter

오늘 발생한 문제(발생 했다면)