오랜만에 벨로그 글을 적는다
오늘은 쉬어가는 타임이라고 문법 정리를 해보라고 한다
장고로 개인 프로젝트 하나를 만들어보니까 훨씬 이해하기는 쉬웠던 것 같다.
일단 정리부터 해야겠다.
# 설치방법!!!!!!!
# 윈도우는 안해봄;
# macOS/Linux에서는
pip install poetry
# Windows에서는
curl -sSL https://install.python-poetry.org | python3 -
근데 검색해보니
윈도우에서 쓰는 명령어랑 공용으로 쓴다고 한다.
pip install 이게 현재는 권장되는 방법이 아니라고 함
poetry shell ```간단하다:)```
#사실 poetry 가상환경 설정이 가능하지만
#나는 pyenv-virtualenv를 써서 관리했다.
#그냥 1project = 1가상환경
#poetry는 프로젝트 패키지 의존성을 위하여 공동작업시 동일한 환경선상에서 출발하기 편하다
#물론 검색해보니 pyenv로는 python버전 관리를 위해 같이 사용한다고 한다
#다 알기때문에 pass
# 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에 있음
# 그럼 기본 세팅은 끗
]
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를 찾게 만든다
#이거 안하면 얘가 못찾음 = 실제로 다른경로에 냅둘 시 저거 설정해줘야 얘가 찾음
]
# 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'
항목 | 입력값 | 길이 제한 | 결과 |
---|---|---|---|
ID | 뷁 | 1글자 | 정상 작동 ✅ |
ID | 뷁뷁 | 1글자 초과 | 프로그램 폭발 💥 |
비밀번호 | pw | 2글자 | 정상 작동 ✅ |
비밀번호 | pwd | 2글자 초과 | 도시 폭발 💣 |
# 각 필드라고 했을 때 겁나 많긴 한데 자주쓰는것들만 좀 적어보겠다
# 그리고 그때그때 검색해보면 뭐가 계속 나온다 ;;
# 짧은 문자열 (예: 제목, 이름)
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) # 수정 시 자동 갱신
# 뭐 사실 쓰기 나름이기 때문에 진짜 많다
# 이건 내가 쓰고싶은 내용 검색해서 쓰자
# 1. 모델을 변경한 후 마이그레이션 파일 생성
python manage.py makemigrations
# 2. 마이그레이션을 데이터베이스에 적용
python manage.py migrate
# 데이터베이스 초기화 (주의: 모든 데이터가 삭제됨)
python manage.py migrate app_name zero
# git쓴 사람들은 이해가 빠름
# 마지막에 쓴 내용은 꼭 필수로 알아두자 내가 이거때문에 좀 고생좀 했다 ^^
어떻게 쓰는지?
{{ }} 변수를 출력할 때 씀.
예를 들어 {{ name }}이라고 쓰면 파이썬에서 보낸 name 변수값이 여기에 나타남
{% %} if문이나 for문 같은 제어문을 쓸 때 사용.
예를 들어 {% if user %}처럼 조건문을 쓸 수 있음
{# #} 주석을 달 때 사용. 이건 실제 웹페이지에서는 안 보임
<!-- 요런 기본 틀이 있다고 가정해보자 -->
<!-- 기본껍데기 이름 = ggupdaegi.html -->
<html>
<body>
{% block content %}
{% endblock %}
</body>
</html>
<!-- 지금 나는 위에있는 껍데기를 가져온거다 -->
<!-- extends를 통해서^^ -->
<!-- block를 통해 나는 이 부분만 바꿔야징 하고 하기싫다고 적어놨다 -->
{% extends 'ggupdaegi.html' %}
{% block content %}
아오 하기싫어
{% endblock %}
# 요건 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부터 이건 걍 야 '이 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로 이동!
# 어우 근데 다 똥으로 설명하니까 좀 드럽긴하네
자 마지막이다 조금만 더 힘내서 작성하고 운동가야겠다.
# 아마 걍 설정파일/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 파일에서 처리하겠다는 뜻!
]
# 위에 것과 연결하여 그럼 아마 ddong/urls.py는 아래와 같이 추가를 했을것이다.
# 왜냐? url include를 통해 ddong로 시작하는건 모두 ddong에서 찾아라 라고 했기 때문
# 그게 바로 url include이다.
urlpatterns = [
path('make/', views.make_ddong),# 엔드포인트 = ddong/make/
path('eat/', views.eat_ddong),# 엔드포인트 = ddong/eat/
]
# 어우 이해는 빨리되는데 속이 좀 안좋네
include는 "이 주소로 시작하면 저기에 가가지고 urls.py 파일을 보셈"라고 알려주는 거다.
ddong예시 참조
이거보다 쉽게 설명하신분 추첝해주세여 👍🏻