(Django) Пытаюсь понять, как получить нужный продукт, используя параметры запроса в Postman (url.py и views.py) - PullRequest
0 голосов
/ 30 мая 2020

Я создавал приложение для магазина сэндвичей и успешно создал models.py и вставил все данные о продукте. Однако, когда я пытаюсь вызвать специфицированные c продукты с помощью Postman и сервера Django, он продолжает показывать 404. Я набираю в почтальоне примерно так: http://10.58.1.157: 8000 / product / sandwich? Product_id = 1

Ниже приведены мои коды для urls.py и views.py

До сих пор я пробовал: urls.py

from django.urls import path
from .views import ProductView

urlpatterns = [
    path('sandwich/int:<product_id>/', ProductView.as_view()),
]

и: urls .py

path('sandwich/(?P<product_id>[\w.-]+)/', ProductView.as_view())

views.py

import json
import bcrypt
import jwt

from django.views               import View
from django.shortcuts           import render
from django.http                import HttpResponse, JsonResponse
from django.db.models           import Q

from .models                    import Product, Category, SubCategory

class ProductView(View):
    def get(self, request):

        product_id = request.GET.get('product_id', None)

        return JsonResponse({'product_name':Product.objects.get(id=product_id).values()})

Чтобы прояснить GET-запрос, добавлю ниже скриншот Postman: Postman screenshot

Ответы [ 2 ]

1 голос
/ 30 мая 2020

Похоже, это из-за неправильного пути URL. Это обычно указывает на ошибку 404-NotFound.

Вам нужно добавить вопросительный знак , который по сути формирует строку запроса . Он обрабатывается и доступен как объект, подобный словарю (a QueryDict) в request.GET in views.py

Вы можете определить его так, с помощью ?, используя шаблон REGEX ( Вы также можете изменить в соответствии с вашими потребностями)

path('sandwich/(?P<product_id>[\w.-]+)/', ProductView.as_view()),

В вашем views.py вы можете отфильтровать их с помощью

product_id = request.GET.get('product_id', None)

Теперь, надеюсь, он вернет ответ, когда URL не может выдает ошибку 404.

См. пример

0 голосов
/ 31 мая 2020

Я наконец решил проблему!

Я посмотрел на эту страницу и импровизировал соответственно ... https://docs.djangoproject.com/en/3.0/topics/http/urls/#nested -аргументы

окончательная версия запроса: http://127.0.0.1: 8000 / product /? Product_id = 1

и urls.py:

from django.urls        import path, re_path
from .views             import ProductView

urlpatterns = [
    re_path(r'^(?:\?product_id=(?P<product_id>\d+)/)?$', ProductView.as_view()),
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...