pip install django
pip freeze

django-admin startproject <project name>
지정한 이름의 폴더가 생기고, 내부에 manage.py가 생긴다.
python manage.py runserver 명령어로 실행한다.
서버 실행 후 생기는 주소에 접속하면 다음과 같은 화면이 확인된다.


settings.py : 각종 django 프로젝트 설정
urls.py : url 관리
manage.py : 서버 실행 역할
db.sqlite3 : 데이터베이스
django는 하나의 프로젝트에 여러가지의 app으로 구성되어있으며,
각종 요청에 따라 app을 호출한다.
예를 들어 project name이 webproj일 때,
~/webproj/ 에서 실행한다.
django-admin startapp homepage

admin.py : admin page 관리
apps.py : app에 대한 설정 관리
models.py : 데이터 베이스에 대한 schema
test.py : app에 대한 테스트 관리
views.py : app의 view 관리

# view.py
def index(request):
return HttpResponse("Hello World!")
#url.py
from homepage.views import index
urlpatterns = [
path('admin/', admin.site.urls), # # 127.0.0.1/admin/
path('', index) # 127.0.0.1/
]
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'homepage'
]
간단한 app 하나를 추가하기 위해서 3개의 파일을 수정해야 한다.
app 은 view.py에,
url.py에 어떤 url에 대해서 해당 app을 호출할 것인지,
settings.py에 어떤 app을 가지고 있는지 명시해야 한다.
python manage.py migrate

python manage.py createsuperuser
adming 계정 생성

admin 기본 홈페이지


dict 형태로 전달받은 인자를 html에서 {{ argKey }} 형태로 사용할 수 있다.
view.py
from django.shortcuts import HttpResponse, render
# Create your views here.
def index(request):
# return HttpResponse("<h1>Hello World!</h1>")
name = "gildong"
return render(request, 'index.html', {'my_name': name})
# index.html
# 기본적인 구성
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Python django example</title>
</head>
<body>
<h1>Title</h1>
<p>test html</p>
{{ my_name}}
</body>
</html>
# setting.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, "homepage", "template")
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
'DIRS' 부분에 html 파일의 위치를 명시한다.

| (파이프라인)을 이용해서 다음과 같은 방식으로 사용한다.
{{ my_name |length }}

{{ my_name |upper }}

# view.py
from django.shortcuts import HttpResponse, render
# Create your views here.
def index(request):
# return HttpResponse("<h1>Hello World!</h1>")
num = [10, 20, 30, 40, 50]
return render(request, 'index.html', {'my_list': num})
# index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Python django example</title>
</head>
<body>
<h1>Title</h1>
<p>test html</p>
{% for element in my_list %}
{{element}}
{% endfor %}
</body>
</html>

# index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Python django example</title>
</head>
<body>
<h1>Title</h1>
<p>test html</p>
{% for element in my_list %}
{% if not element|divisibleby:"20" %}
{{element}}
{% endif %}
{% endfor %}
</body>
</html>

# views.py
def introduce(request):
name = "김동영"
birth = "19940314"
content = ["프로그래머스 인공지능 데브코스 3기", "예비집사", "고양이 카페 우수 회원"]
return render(request, 'introduce.html', {'my_name': name, 'my_birth': birth, 'my_content': content})
# introduce.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>자기소개</title>
</head>
<body>
<h3>이름 : {{my_name}}</h3>
<h3>생년월일 : {{my_birth}}</h3>
<h3>소개 : </h3>
{% for content in my_content %}
{{content }} <br>
{% endfor %}
</body>
</html>

문자열에 \n을 넣어서 표현하려고 했는데 html 문법에는 적용되지 않아서, 문자열 리스트를 전달한 후 for 문을 통해 content 마다 <br>을 사용하여 줄바꿈을 적용하였다.