TIL | Django # 2

vel.Ash·2022년 4월 21일
0
post-thumbnail

urls.py

-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 확인 가능 

새로운 URL 추가하기

<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! 나옴

*클라이언트와 서버
*클라이언트
→ 웹 브라우저, 모바일 앱 등

*서버
→ 클라이언트에게 서비스를 제공함

URL 란?

클라이언트가 서버에게 서비스를 요청할 수 있게 해줌

naver.com/login 

도메인(Domain) 경로(Path) 라고 함 → 도메인 + 서버 → URL
도메인

  • ip는 사람이 이해하고 기억하기 어렵기 때문에 이를 위해서 각 ip에 이름을 부여할 수 있게 함. 이 이름을 도메인이라고 한다.
  • DNS(Domian Name System) : 인터넷 상의 주소록
# 예시 1 
opentutorials.org
opentutorials : 컴퓨터의 이름
org : 최상위 도메인 - 비영리단체

# 예시 2
daum.co.kr
daum : 컴퓨터의 이름
co : 국가 형태의 최상위 도메인을 의미
kr : 대한민국의 NIC에서 관리하는 도메인을 의미

경로

  • 요청하는 내용을 담고 있음(서버 안에서 원하는 것이 있는 위치)

URL 작성 규칙

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 기준으로 경로 적어줘야 한다!!


메인페이지 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를 보게 된다

Django 템플릿과 렌더링

Template
-html처럼 화면 구성을 담당하는 부분을 템플릿이라고 부름
Template rendering
-템플릿을 유저에게 보여준다

⭐ 결론적으로 template은 rendering을 통해 HttpResponse 객체로 변환됨

foods app 안에 Templates 만들기

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>
profile
코린이의 개발공부

0개의 댓글