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>
을 사용하여 줄바꿈을 적용하였다.