📗 Django 


Django URLs

URL dispatcher 🔗 링크
  • 무언가를 목적지로 보내는 주체

 

Dispatcher란?
  • 들어온 요청을 어디로 보내서 처리할지 정하는 곳

 

트레일링 슬래시 (/)

트레일링 슬래시(Trailing slash)
  • 개념 자체는 URL 뒤에 붙는 슬래시다.
  • 컴퓨터들 사이에서는 트레일링 슬래시에 따라 보이는 화면이 달라진다.
    • https://www.mycooooolsite.com/ → 디렉토리
    • https://www.mycooooolsite.com 파일

 

Variable Routing

바뀌는 부분만 변수로 지정하여 URL를 생성하는 방법
  • URL 일부를 변수로 지정하여, 해당 부분에 들어온 값을 view로 넘겨주는 기능
  • view에서 변수를 받아서 그 부분에 맞게 처리하도록 할 수 있다
    • 하나의 URL에 마음껏 여러 페이지를 연결할 수 있게 된다.

 

Variable Routing 해보기

더보기

1️⃣ urls.py에 추가하기

path('users/<str:username>/', views.profile),

2️⃣ views.py에 함수 추가하기

def profile(request, username):
    context = {"username": username}
    return render(request, "profile.html", context)

3️⃣ templates 폴더에 profile 파일을 생성 후 작성하기

{% extends "base.html" %}

{% block content %}
	<h1>Profile Page of {{ username }}</h1>
    <p>Username : {{ username }}</p>

    <a href="/index/">Go to First page</a>

{% endblock content %}

4️⃣ python manage.py runserver

  • 서버 주소/users/username(직접 입력)을 기입해주면 설정한대로 화면이 보이게 된다.

Multiple Apps

새로운 종류의 경로가 추가될 때 같은 경로끼리 묶어서 관리하는 방법

 

↓ 생성하는 방법

더보기

1️⃣ users 앱 생성

python manage.py startapp users

2️⃣ settings.py에 들어가서 생성한 App 등록

# INSTALLED_APPS
'users',

3️⃣ 각각의 App에 urls.py 파일 생성하기

articles App에 urls.py 생성하기
users App에 urls.py 생성하기

4️⃣ 각각의 urls.py에 from~import~, urlpatterns=[] 입력하기

articles App에 url 옮기기
from django.urls import path
from articles import views

urlpatterns = [
    path('hello/', views.hello),
    path('data_throw/', views.data_throw),
    path('data_catch/', views.data_catch),
users App에 url 옮기기
from django.urls import path
from users import views

urlpatterns = [
    path('', views.users),
    path('profile/<str:username>/', views.profile),
]

5️⃣ views.py 파일 옮기기

articles App에 views.py 코드 옮기기
users App에 views.py 코드 옮기기

6️⃣ templates 옮기기

articles App
users App

파일 경로를 변경하였기 때문에 url도 바뀌게 된다.

하지만 모든 파일에 대한 url를 하나하나 수정할 수도 없는 노릇인데,, 🤔

어떻게 해야 할까?


Naming URL Patterns

  • 어떠한 URL을 작성할 때 직접 하드코딩 하지 않고 각각의 URL에 ‘이름’을 붙여주는 것
  • view와 template에서 특정 경로에 대한 의존성을 제거할 수 있다.
path() 함수의 name 파라미터 사용

↓ 해보기

더보기
articles App에 대한 url 이름 지어주기
from django.urls import path
from articles import views

urlpatterns = [
    path('hello/', views.hello, name="hello"),
    path('data_throw/', views.data_throw, name="throw"),
    path('data_catch/', views.data_catch, name="catch"),
]
users App에 대한 url 이름 지어주기
from django.urls import path
from users import views

urlpatterns = [
    path('', views.users, name="users"),
    path('profile/<str:username>/', views.profile, name="profile"),
]

 

  • name만 가져다가 수정해 주면 쉽게 url을 바꿀 수 있다.

↓ name 써보기

더보기

1️⃣ urls.py에 name 지어주기

articles App의 urls.py에 name 지어주기
from django.urls import path
from articles import views

urlpatterns = [
    path('hello/', views.hello, name="hello"),
    path('data_throw/', views.data_throw, name="data_throw"),
    path('data_catch/', views.data_catch, name="data_catch"),
]
 users App의 urls.py에 name 지어주기
from django.urls import path
from users import views

urlpatterns = [
    path('', views.users, name="users"),
    path('profile/<str:username>/', views.profile, name="profile"),
]

2️⃣ html 수정해 주기

변경 전
<form action="/data_catch/" method="GET">

⬇️

변경 후
<form action="{% url 'data_catch' %}" method="GET">

3️⃣ runserver 새로고침

 

새로고침 하면 잘 작동되고,

 

 

데이터도 잘 받아지고 있음을 알 수 있다.

 

+ Recent posts