티스토리 뷰

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"
}

 

'study > Django' 카테고리의 다른 글

Django - Query String  (0) 2022.08.17
Django - 동일한 테이블을 참조하는 ForeignKey  (0) 2022.07.31
Django - JWT 발급  (0) 2022.07.13
Django - 암호화 (bcrypy)  (0) 2022.07.12
Django - 회원 로그인 구현  (0) 2022.07.10
댓글