오랜만에 벨로그 글을 적는다
오늘은 쉬어가는 타임이라고 문법 정리를 해보라고 한다
장고로 개인 프로젝트 하나를 만들어보니까 훨씬 이해하기는 쉬웠던 것 같다.

는 개뿔 왜캐 알아야 할게 많아

일단 정리부터 해야겠다.

1. Django 프로젝트 세팅

  • poetry를 설치하고 시작해야한다. 물론 설치 안해도 되지만 편하다 :)
    언제 requirements.txt로 관리를 하고 있음.. 안그래도 바쁜데
    특히 requirements.txt를 수동으로 관리할 필요 없이
    pyproject.toml에서 자동으로 관리를 해준다
    패키지끼리의 버전 충돌을 자동으로 해결해주니 안 쓸 이유가 없다.
# 설치방법!!!!!!!
# 윈도우는 안해봄;
# macOS/Linux에서는
pip install poetry

# Windows에서는
curl -sSL https://install.python-poetry.org | python3 -

근데 검색해보니 
윈도우에서 쓰는 명령어랑 공용으로 쓴다고 한다.
pip install 이게 현재는 권장되는 방법이 아니라고 함 
  • 가상환경 구축하는 방법 (with Poetry)
poetry shell ```간단하다:)```

#사실 poetry 가상환경 설정이 가능하지만
#나는 pyenv-virtualenv를 써서 관리했다.
#그냥 1project = 1가상환경 
#poetry는 프로젝트 패키지 의존성을 위하여 공동작업시 동일한 환경선상에서 출발하기 편하다
#물론 검색해보니 pyenv로는 python버전 관리를 위해 같이 사용한다고 한다
#다 알기때문에 pass
  • Django 설치 및 프로젝트 구성, 앱 세팅하는 방법
# Poetry로 Django 설치
poetry add django

# 프로젝트 생성
django-admin 프로젝트이름 config .
#config 도 사실 아무렇게나 바꿔도 되지만 설정파일인 만큼 걍 정적으로 가자
#보통 다들 정적으로 쓴다고함 ㅇㅇ

# 개발 서버 실행
python manage.py runserver
# 로켓보이면 성공한거임

# 예:'뷁'이라는 앱을 만들시
python manage.py startapp 뷁

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    '뷁',  # 뷁을 만들었으니 여따 추가한다.
    # config/settings.py에 있음
    # 그럼 기본 세팅은 끗
]
  • templates 경로 지정하기
mkdir templates
# 프로젝트 루트에다가 templates라고 만들어버린다

#다시 settings.py로 돌아와 아래 내용을 찾는다
import os  # 파일 맨 위에 추가 = 요건 import를 꼭 해놔야 장고가 찾는다

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')], #혹은
        'DIRS': [BASE_DIR / 'templates'], #둘중에 하나 ㄱ
        'APP_DIRS': True,
        ...
    },
    # pathlib이라고 장고 3.1이후부터 이용한다고 한다 근데 찾아보니 옛버전도 있어서 가져옴
    #밑에 뭐가 더 있긴 한데 저기서 DIRS라고 하는 경로를 수정해서 templates를 찾게 만든다
    #이거 안하면 얘가 못찾음 = 실제로 다른경로에 냅둘 시 저거 설정해줘야 얘가 찾음
]
  • static 경로 지정하기
# templates랑 똑같다
mkdir static #폴더만들고

# 다시 settings.py로 돌아와 아래 내용을 찾는다
# settings.py 파일 맨 아래에 있을거임
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
#혹은 요건 pathlib 쓴 최신버전 기준임 위랑 아래랑 같음 ㅇㅇ
STATIC_ROOT = BASE_DIR / 'staticfiles'
STATICFILES_DIRS = [
    BASE_DIR / 'static',
]

#media도 마찬가지라 걍 적겠다
# Media 파일 설정 ㅇㅇ os.path.join써도 되고 아래 Pathlib써도되고 무방 
# 장고 버전보고 결정하자
MEDIA_URL = 'media/'
MEDIA_ROOT = BASE_DIR / 'media'

2. Database Model

  • 데이터베이스 모델 정의하기
    걍 쉽게 말해 우리가 이제 위에서 정의한 내용을 가지고 뭘 만들었을 때
    우리가 저장하고 싶은 데이터를 정의하기 위해 쓴다.
    아래에 기가막힌 예가 있다
    요론식으로 얘한테 정의를 내려주면 장고가 알아서 만들어준다
항목입력값길이 제한결과
ID1글자정상 작동 ✅
ID뷁뷁1글자 초과프로그램 폭발 💥
비밀번호pw2글자정상 작동 ✅
비밀번호pwd2글자 초과도시 폭발 💣
  • 각 필드별 특징 정리하기
# 각 필드라고 했을 때 겁나 많긴 한데 자주쓰는것들만 좀 적어보겠다
# 그리고 그때그때 검색해보면 뭐가 계속 나온다 ;;

# 짧은 문자열 (예: 제목, 이름)
title = models.CharField(max_length=200)

# 긴 문자열 (예: 게시글 내용)
content = models.TextField()

# 이메일
email = models.EmailField()

# URL
website = models.URLField()

# 날짜만
birthday = models.DateField()

# 시간만
meeting_time = models.TimeField()

# 날짜+시간
created_at = models.DateTimeField(auto_now_add=True)  # 생성 시 자동 저장
updated_at = models.DateTimeField(auto_now=True)      # 수정 시 자동 갱신

# 뭐 사실 쓰기 나름이기 때문에 진짜 많다
# 이건 내가 쓰고싶은 내용 검색해서 쓰자
  • Migration에 대해서 정리하기
    migration은 그냥 다 필요없이 git commit/push를 생각하자
    이거 말고 딱히 좋은 예가 안 떠오른다.
# 1. 모델을 변경한 후 마이그레이션 파일 생성
python manage.py makemigrations

# 2. 마이그레이션을 데이터베이스에 적용
python manage.py migrate

# 데이터베이스 초기화 (주의: 모든 데이터가 삭제됨)
python manage.py migrate app_name zero

# git쓴 사람들은 이해가 빠름
# 마지막에 쓴 내용은 꼭 필수로 알아두자 내가 이거때문에 좀 고생좀 했다 ^^

3. Jinja

  • Jinja 문법 정리하기
    걍 html에서 파이썬언어로 알아먹을 수 있도록 만든 템플릿 언어다
    우리는 파이썬이랑 친하기 때문에 html내에서도 파이썬으로 소통이 가능하다
    근데 걍 직접 해봐야 이해가 빠르다 jinja는
어떻게 쓰는지?

{{ }} 변수를 출력할 때 씀. 
예를 들어 {{ name }}이라고 쓰면 파이썬에서 보낸 name 변수값이 여기에 나타남

{% %}  if문이나 for문 같은 제어문을 쓸 때 사용. 
예를 들어 {% if user %}처럼 조건문을 쓸 수 있음

{# #}  주석을 달 때 사용. 이건 실제 웹페이지에서는 안 보임
  • block 사용법 / extends 사용법
    extends는 '기본 틀'을 가져오는거 (약간 PPT껍데기 가져오는거랑 비슷하다고 보면된다)
    block은 그 가져온 틀에서 '이 부분만 바꿀거야~' 하고 지정해놓는 것
<!-- 요런 기본 틀이 있다고 가정해보자 -->
<!-- 기본껍데기 이름 = ggupdaegi.html -->
<html>
<body>
    {% block content %}
    {% endblock %}
</body>
</html>
<!-- 지금 나는 위에있는 껍데기를 가져온거다 -->
<!-- extends를 통해서^^ -->
<!-- block를 통해 나는 이 부분만 바꿔야징 하고 하기싫다고 적어놨다 -->
{% extends 'ggupdaegi.html' %}
{% block content %}
    아오 하기싫어
{% endblock %}

4. FBV(Function Base View)

  • FBV란?
    FBV(function based views)의 약자로 걍 장고에서 view함수를 작성하는 방법은 크게 두가지가 있는데 그중 하나이다.
    쉽고 간단한 로직을 쓰는데 사용한다.
    더더더더 쉽게 풀어보자면 view 말그대로 보여줘야 되는데 어떻게 보여줄거냐?
    함수를 사용해서 이것저것 쓰면 보여진다고 생각하면 된다
    걍 이것도 직접 해봐야 쉽다..
# 요건 FBV 를 이용한 view 방식
def ddong(request): #ddong이라는 함수를 만들고
    return render(request, 'weckweck.html') #render를 이용해 weckweck.html을 보여준다.
    
# 안 나왔는데.. 걍 CBV도 쓰겠다
# 장고에서 제공하는 TemplateView라는 미리 만들어진 클래스를 가져올거다
# CBV는 이미 있는 클래스를 가져온다
from django.views.generic import TemplateView

# ddong라는 클래스를 만들어서 TemplateView의 기능을 쓴다 라고 해주는거다
# 위와 흡사하지만 차이가 있다면 def/class 차이이다
class ddong(TemplateView):
    template_name = 'weckweck.html'
  • render / redirect
# render부터 이건 걍 야 '이 html 보여줘라' 하는거랑 똑같다.
  def profile(request):
    name = "하기싫다맨"
    return render(request, 'game2joa.html', {'name': name})
    # game2joa.html을 보여주는데 '하기싫다맨' 이라는 변수도 같이 넘겨라 ㅇㅋ?
    
# redirect는 어디서 들어본 용어일텐데 그냥 url 이동시키는거다 예를들어
  def ddong_out(request):
    # ddong이 out할때...
    return redirect('toilet')  # toilet이라는 url로 이동!
  
  # 어우 근데 다 똥으로 설명하니까 좀 드럽긴하네

5. Urls

자 마지막이다 조금만 더 힘내서 작성하고 운동가야겠다.

  • URL 엔드포인트란?
    걍 쉽게 말해서 URL은 웹사이트의 주소를 지정하는 방법이다.
    우리가 흔히보는 www.naver.com 에서 blog나 어디 웹툰들어가면 마지막이
    www.naver.com/blog 혹은 www.naver.com/webtoon 이렇게 돼 있을건데
    저게 엔드포인트이다
    ✨ 참고로 아무것도 없는건 그냥 root(루트) URL이라고 부름
  • urlspatterns
# 아마 걍 설정파일/urls.py들어가면 저런것도 없겠지만 path 어쩌구 되있을텐데
# 좀 깊게 알아보자면
# config/urls.py (메인 urls.py)
from django.urls import path, include

urlpatterns = [
    path('itsme/', admin.site.urls),
    # 나는  url에서 엔드포인트가 itsme로 가게된다면 admin(관리자)가 열리게끔 설정해둔거고
    
    path('', views.toliet, name='toliet'),
    # 아무것도 없는('') root url로 갈시 toliet을 보여줘라 적어놓은거고
    
    path('ddong/', include('ddong.urls')),
    # ddong/으로 시작하는 주소는 전부 ddong/urls.py 여기서 찾아라 ㅡㅡ 하는거고
    # 쉽게 예를 들어 ddong/make/, ddong/eat/ 이런 주소들은
    # ddong/urls.py 파일에서 처리하겠다는 뜻!
]
  • URL Include 개념 및 방법
# 위에 것과 연결하여 그럼 아마 ddong/urls.py는 아래와 같이 추가를 했을것이다.
# 왜냐? url include를 통해 ddong로 시작하는건 모두 ddong에서 찾아라 라고 했기 때문
# 그게 바로 url include이다.

urlpatterns = [
    path('make/', views.make_ddong),# 엔드포인트 = ddong/make/
    path('eat/', views.eat_ddong),# 엔드포인트 = ddong/eat/
]
# 어우 이해는 빨리되는데 속이 좀 안좋네
  • path / include
    위에서 다 설명을 했지만 다시 한번 쉽게 설명하자면
    path는 "이 주소로 오면 이 함수를 실행해!"라고 알려주는 거고
    그래서 그냥 처음에 달려있는 path는 이 함수 실행해서 보여주셈! 이 되겠다.

include는 "이 주소로 시작하면 저기에 가가지고 urls.py 파일을 보셈"라고 알려주는 거다.
ddong예시 참조

Django 요약정리 끗!

이거보다 쉽게 설명하신분 추첝해주세여 👍🏻

profile
끄적

0개의 댓글