독립된 공간 (각 프로젝트가 영향 받지 않음)
가상환경 안에서 장고를 깔았으면 다른 가상환경에선 연동이 안됨
python -m venv <가상환경이름>
venv = virtual environment
source <가상환경이름>/Scripts/activate
deactivate
파이썬으로 작성된 패키지 소프트웨어를 설치, 관리하는 패키지 관리 시스템
Django = pip 패키지
pip install django
pip uninstall django
pip install django==<버전>
select default shell, git bash에서 code .
django-admin startproject <project 이름>
python manage.py runserver
프로젝트의 구성 단위
App 은 안 만들어도 되는 상황이어도 만들어두는 편이 코드 가용성을 위해 좋음
python manage.py startapp <app 이름>
App 폴더 안에 'templates' 폴더 따로 만들어줘야 함
'templates' 폴더 안에 유저에게 보여질 화면들 (html) 담기
App 생성 후 프로젝트의 settings.py 에 알려야 함
<app이름>.apps.<첫글자대문자app이름>Config
templates 안의 유저에게 보여질 화면 (html)이 언제, 어떻게 처리될지 알려주는 함수 추가해야 함
def home(request):
return render(request, <템플릿 이름>, <딕셔너리>)
내가 만든 html이 어떤 url을 입력했을 때 뜨게 할지 알려야 함
path('', myapp.views.home, name="home")
이름 정하는 이유: 함수이름이 바뀔 수도 있으므로
https://docs.djangoproject.com/en/3.0/ref/templates/language/#templates
{{ python_value }}
템플릿 필터
템플릿 변수에 추가적인 속성 및 기능 제공
{{ python_value | filter }}
{{ value | length }}
{{ value | lower }}
{% tag %} ... 태그 내용 ... {% endtag %}
{% for students in class %} {{students}} {% endfor %}
{% url 'url_name' %}
템플릿 상속 참고
request.GET['<입력한 값>']
https://nachwon.github.io/django-deploy-4-static/
https://crynut84.github.io/2016/11/14/django-static-file/
models.py
class Designer(models.Model): # models.Model 을 상속
image = models.ImageField(upload_to = 'images/') # FileField + height + width
name = models.CharField(max_length = 50)
address = models.CharField(max_length = 255)
description = models.TextField()
# Designer 대표하는 이름
def __str__(self):
return self.name
참고 사이트
ImageField 사용하기 위한 패키지
Terminal
python manage.py makemigrations
python manage.py migrate
참고 사이트
Terminal
하기 전에 migrate 해야됨
python manage.py createsuperuser
admin.py
from .models import Designer
admin.site.register(Designer)
참고 사이트
https://docs.djangoproject.com/en/3.0/ref/contrib/admin/#modeladmin-objects
전달받은 모델의 객체 목록
# Model의 존재 알려주기
from .models import Designer
# QuerySet을 Templates로 보내는 예시
def home(request):
designers = Designer.objects.all()
return render(request, 'home.html', {'designers': designers})
여러 객체의 url를 계층적으로 다룰 수 있도록 도와주는 도구
urls.py
path('profile/<int:designer_id>/', views.detail, name="detail"),
참고 사이트
https://docs.djangoproject.com/en/3.0/ref/urls/#django.urls.path
{% url 'detail' designer.id %}
Object를 가져오려 했는데 없을 경우 나타내는 에러
views.py의 pk 변수명과 urls.py의 변수명은 같아야 함!
from django.shortcuts import render, get_object_or_404
def detail(request, designer_id):
designer = get_object_or_404(Designer, pk = designer_id)
return render(request, 'detail.html', {'designer': designer})