study/Django
Django -path Variable
xoxowo
2022. 7. 24. 23:43
path Variable
GET method를 통해 데이터를 넘길 경우 경로를 변수로 사용한다. (특정 인덱스에 대한 조회)
Django에서 제품의 상세페이지 url 주소를 path Variable를 활용하여 설정하는 방법을 정리해봤다.
http://127.0.0.1:8000/products/1
제품의 상세페이지의 경우 제품의 id로 url 주소를 만들기 위해 products app의 urls.py와 models.py 코드를 수정
# products/urls.py 파일
from products.views import ProductDetailView
urlpatterns = [
path('/<int:product_id>', ProductDetailView.as_view()),
]
# products views.py 파일
class ProductDetailView(View):
def get(self, request, product_id): # urls.py에 받은 /<int:product_id> 즉, int 값을 받아옴
try : # 받아온 product_id으로 Product 모델에서 정보를 가져옴
product = Product.objects.get(id=product_id)
# 이하 생략 ..
→ 유효한 product_id로 접속(서버에 요청)할 경우
http -v get 127.0.0.1:8000/products/10
db에 저장되어있는 product_id 값의 데이터가 정상적으로 전송됨
HTTP/1.1 200 OK
Content-Length: 1041
Content-Type: application/json
Cross-Origin-Opener-Policy: same-origin
Date: Sun, 24 Jul 2022 14:28:32 GMT
Referrer-Policy: same-origin
Server: WSGIServer/0.2 CPython/3.9.12
Vary: Origin
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
{
"RESULTS": {
"category": "Magazine K",
"description": "니베아는 독일 바이어스도르프의 세계적인 스킨로션과
바디케어 브랜드이다.백설공주를 의미하는 라틴어 단어에서 따온것이다.",
"isbn": "978-89-98415-05-1",
"issue_number": 6,
"language": "KOREAN",
"pages": 145,
"price": "14000.00",
"product_image_url": "https://dummyimage.com/1920x1440/001440/fff",
"published_date": "2012. 5. 3",
"size": "170 x 240 mm",
"title": "NIVEA"
}
}
→ 유효하지 않은 product_id로 접속(서버에 요청)할 경우
http -v get 127.0.0.1:8000/products/104
db가 보관하고 있는 product_id의 범위를 벗어나거나 다른 문자가 들어갈 경우 404 error 발생한다.
GET /products/104 HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: 127.0.0.1:8000
User-Agent: HTTPie/3.2.1
HTTP/1.1 404 Not Found
Content-Length: 30
Content-Type: application/json
Cross-Origin-Opener-Policy: same-origin
Date: Sun, 24 Jul 2022 14:25:36 GMT
Referrer-Policy: same-origin
Server: WSGIServer/0.2 CPython/3.9.12
Vary: Origin
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
{
"MESSAGE": "INVALID_PRODUCT"
}