-URL의 경로 항목에 어떤 URL을 입력하든지 간에 django가 가장 먼저 보는 파일은 프로젝트 앱 디렉토리 안에 있는 urls.py임
왜냐면!!
<restaurant/settings.py>
ROOT_URLCONF = 'restaurant.urls'
# 이렇게 프로젝트 앱 디렉토리 내 urls.py 항목을 보도록 기본 설정되어 있음
<기본 urls.py>
urlpatterns = [
path('admin/', admin.site.urls),
]
# admin/이 나오면 admin.site.urls를 보고 처리하세요! (장고 기본)
<admin site 열기>
$ python3 manage.py runserver
# 개발 서버 열어준 뒤 urlpatterns 처럼 /admin 추가하면 Django administration 확인 가능
<restaurant/urls.py>
from django.contrib import admin
from django.urls import path, include
# 새로운 URL 추가 위하여 include 함수 추가 import
urlpatterns = [
path('admin/', admin.site.urls),
path('foods/',include('foods.urls')),
# include 함수를 쓰기 위해서는 django.urls로부터 include 함수 가져와야함
# 만약 주소에 foods가 있으면 foods 앱 안의 urls.py 파일을 보라고 알려줌
# 이를 위하여 food 디렉토리 내 urls.py 생성해줘야 함
<foods/urls.py>
# foods 파일 내 URL 지정
from django.contrib import admin
from django.urls import path
# 여기서는 include 필요 없어서 지움
from . import views
urlpatterns = [
path('index/', views.index),
# 이 foods 앱 안의 views.py를 보라는 의미
# views 사용하기 위해서 import 해줘야함(veiws 모듈에서 index함수 가져오도록)
# views.py에서 HttpResponse 사용하여 index 함수 지정해줘야함
]
<foods/views.py> ⭐
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("<h2>Hello, Django !</h2>")
# 개발서버/foods/index/ url 들어가면 -> hello, Django! 나옴
*클라이언트와 서버
*클라이언트
→ 웹 브라우저, 모바일 앱 등
*서버
→ 클라이언트에게 서비스를 제공함
클라이언트가 서버에게 서비스를 요청할 수 있게 해줌
naver.com/login
도메인(Domain) 경로(Path) 라고 함 → 도메인 + 서버 → URL
도메인
# 예시 1
opentutorials.org
opentutorials : 컴퓨터의 이름
org : 최상위 도메인 - 비영리단체
# 예시 2
daum.co.kr
daum : 컴퓨터의 이름
co : 국가 형태의 최상위 도메인을 의미
kr : 대한민국의 NIC에서 관리하는 도메인을 의미
경로
1.urls.py에 적는 URL 패턴은 슬래시( / )를 붙여서 작성
urlpatterns=[
path('foods/', views.index),
path('foods/banana/', views.fruit),
]
-URL 끝에 있는 슬래시를 트레일링 슬래시(traling slash)라고 함
2.다른 URL로 이동하기 위한 URL을 적을 때 앞에 슬래시(/)가 있으면 도메인으로 부터의 경로를 의미
예를 들어 현재 naver.com/food/에 있다고 가정하고 아래의 이동하기 링크를 누르면
<a href="/banana/">이동하기</a>
naver.com/food/banana/
가 아닌 naver.com/bnana/
로 이동하게 됨
→ 따라서 경로 앞에 /가 있는 경우 도메인 기준
으로 경로 적어줘야 한다!!
3.다른 URL로 이동하기 위한 URL을 적을 때 앞에 슬래시(/)가 없으면 현재 URL 뒤에 이동하는 URL이 연결된 경로
예를 들어 현재 naver.com/food/에 있다고 가정하고 아래의 이동하기 링크를 누르면
<a href="/banana/">이동하기</a>
naver.com/food/banana/
로 이동하게 됨
→ 따라서 경로 앞에 /가 없는 경우 현재 url 기준
으로 경로 적어줘야 한다!!
아무것도 없는 ‘’경로로 경로를 urlpatterns에 작성해주기
naver.com 처럼 추가적인 경로 없지만 도메인으로 메인 페이지 실행해주기 때문 !
<urlpatterns.py>
# 메인페이지 설정 방법
urlpatterns = [
path('', include(' ... '),
...
]
# 예시
# costaurant/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('foods.urls')),
]
# 만약 이렇게 지정하면 ''패턴이 foods 앱의 urls.py를 보게 된다
Template
-html처럼 화면 구성을 담당하는 부분을 템플릿이라고 부름
Template rendering
-템플릿을 유저에게 보여준다
⭐ 결론적으로 template은 rendering을 통해 HttpResponse 객체로 변환됨
1.foods 디렉토리 내 templates 디렉토리 만들기
2.templates 디렉토리내 foods 디렉토리 만들기(foods/templeates/foods)
3.새로 생성된 food파일에 html 파일 생성해주기 → index.html → index template이라고 할 수 있음
4.index.html 파일 내 화면구성 작성해주기
5.views.py 파일에서 렌더링
def index(request):
return render(request, 'foods/index.html')
# render함수(request, 우리가 원하는 경로)
# render 함수는 정보와 템플릿을 토대로 하나의 응답 -> 하나의 HttpRespose객체를 만들어 리턴해줌
<render()>
render( request, template_name(렌더링에 사용할 대상 템플릿 명시), context=None, content_type=None, status=None, using=None ) * 필수인자
→ render 함수는 인자로 주어진 템플릿을 사전형(dict) 인자인 context와 결합해서 렌더링을 거친 다음 HttpResponse 객체로 반환하는 함수. 쉽게 말하면 인자로 넘겨주는 템플릿과 context 데이터를 합쳐서 HttpResponse 객체로 돌려줌
정적파일
-html 파일을 제외하고 웹 페이지를 렌더링하는 과정에서 필요한 추가적인 파일들
-ex.CSS, JavaScript, 이미지, 폰트 등
-템플릿을 넣어주었던 샌드위치식 구조로 똑같이 디렉토리 생성
1.위와 같이 정적디렉토리 파일 만들기
2.css, 폰트, 이미지 등 사용할 파일 각각에 디렉토리에 넣어주기
3.html 파일 맨 위에 템플릿 태그 및 정적 파일 연결
<index.html>
{% load static %}
<!-- 탬플릿 태그 : static에 있는 정적파일을 현재 이 템플릿 파일에서 사용한다고 알려주는 것 -->
<!DOCTYPE html>
<html>
<head>
<title>Ash의 레스토랑</title>
<meta charset="utf-8">
<!--css파일 연결 -->
<link rel="stylesheet" href={% static 'foods/css/styles.css' %}>
</head>
<body>
<div> July 16, 2020 </div>
<hr/>
<h1>Ash의 레스토랑</h1>
<h2>맛있는 건 0kacl</h2>
<div class="food-container">
<div class="food">
<!--이미지 파일 연결 -->
<img src={% static 'foods/images/chicken.jpg'%} width="300px" height="200px"/>
<div class="info">
<h3>코딩에 빠진 닭</h3>
<P>주머니가 가벼운 당신의 마음까지 생각한 가격!</p>
<a href="#">메뉴 보기</a>