django-admin startprojec {프로젝트명}
python manage.py runserver
(+ 오류 해결)
- ImportError: Couldn't import Django.(django import 불가)
pip install django
- You have 18 unapplied migration(s)
1. python manage.py makemigrations
2. python manage.py migrate
3. python manage.py runserver
runserver의 비밀
runserver뒤에는 IP주소와 포트번호가 숨겨져 있다
-아이피 주소(IP Address): Internet Protocol의 앞 글자를 딴 것으로 네트워크 상에서 다른 컴퓨터와 내 컴퓨터를 구별하는 일종의 주소
-포트(Port): IP로 찾은 컴퓨터 내부에서 실행되고 있는 프로그램이나 서비스를 구분하는 값
→ IP로 컴퓨터를 찾고 그 안에서 포트를 가지고 프로그램을 찾는 것임
개발서버(runserver)는 확인용이므로 배포시에는 웹서버를 따로 사용해야 한다
django 프로젝트 구조
각 파일들의 역할
django App(앱) 구조
Django에서 웹 서비스 각각의 기능은 앱 단위로 구현
서로 다른 기능을 하는 앱을 여러 개 모아서 하나의 프로젝트로 생성
django App 생성
python manage.py startapp {생성할 app 이름}
django App 구조
{app_name}/
__init__.py
admin.py : 각각의 앱을 Django의 관리자 기능과 연결하거나 관리자 기능에 대해 설정
apps.py : 각각의 App마다 추가적인 기능 및 설정을 넣어 주기 위한 파일
migrations/ : Django 앱의 데이터 구조에 대한 변경 사항인 migration 파일이 저장되는 디렉토리
__init__.py
**models.py** : 앱에서 사용하는 데이터 구조를 정의하고 데이터베이스와의 소통을 담당하는 파일
tests.py : 앱에 대한 테스트 코드를 작성하는 파일. 프로젝트를 모두 완성한 다음 테스트를 준비하는 것이 아니라 앱 별로 작은 단위의 자동화된 테스트를 미리 만들어서 프로젝트 전체에 대한 테스트가 효율적으로 이루어질 수 있도록 작성
**views.py** : 앱에서 어떤 기능을 할지에 대한 메인 로직을 담당하는 파일
새로운 앱을 생성하면 setting.py에 추가 (예시)
INSTALLED_APPS =[
...,
'menus',
]
Reusable App(재사용성이 있는 App)
예전에 만든 app, 다른 개발자가 만든 app을 사용할 재사용할 수 있음.(수정과 변경)
-한 가지 앱은 한 가지 기능을 잘 수행
-많은 앱으로 구성하는 것을 두려워하지 말자
-각각의 앱을 유연하게 작석
-배포 가능한 앱
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('menus/', include('menus.urls')) #주소에 foods가 있으면 foods앱 안의 urls.py를 확인하라
]
from django.contrib import admin
from django.urls import path
from . import views #같은 데렉토리 내 views 파일을 import 하라
urlpatterns = [
path('index/', views.indwx) #views파일에서 index 함수를 불러와라
]
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse("<h2>Hello, Django!</h2>") #화면에 해당 글귀가 보여짐
url작성 헷갈리지 말기
다른 URL로 이동하기 위한 URL을 적을 때 앞에 슬래시 있음→도메인으로부터의 경로 의미
예) 현재 codeit.kr/food/ 위치일 때,
<a href="/banana/">이동하기</a> #클릭 후 도메인: codeit.kr/banana/
<a href="banana/">이동하기</a> #클릭 후 도메인: codeit.kr/food/banana/
템플릿(template)은 django에서 화면 구성을 담당하는 부분
렌더링(rendering)을 통해 HttpResponse객체로 변환됨
유저에게 보여줄 내용을 template으로 깔끔하게 정리
파일위치: costaurant/menus/template/menus/index.html
<h2>Hello Django</h2>
<h2>Hello Django</h2>
파일위치: costaurant/menus/views.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return render(request,'menus/index.html')
render함수
render(request, template_name, ...)
-request: 데이터를 요청한 요청 객제. 요청 정보에 접근해서 다양한 기능 구현을 위해 필요함
-template_name: 렌더링에 사용할 대상 템플릿