我正在尝试形成这样的网址,
http://localhost:8000/mealplan/meals/search/2?from_date=2019-12-29&to_date=2019-12-30&from_time=06:00&to_time=22:00
这是我在 urls.py 中尝试过的
url(r'^meals/search/(?P<user_id>[\w.-]+)/(?P<from_time>[\w.-]+)/(?P<to_time>[\w.-]+)/(?P<from_date>[\w.-]+)/(?P<to_date>[\w.-]+)$', FilterMealList.as_view(), name='filter_meals'),
Run Code Online (Sandbox Code Playgroud)
显然这不起作用。我收到 404,邮递员上不存在 url。这也是我基于班级的观点。
class FilterMealList(views.APIView):
def get(self, request, **kwargs):
try:
from_time, to_time, from_date, to_date = kwargs.get('from_time'), kwargs.get('to_time'), kwargs.get(
'from_date'), kwargs.get('to_date')
return Response({"Suceess": "{}, {}, {}, {}".format(from_time, to_time, from_date, to_date)},
status=status.HTTP_200_OK)
except KeyError as e:
return Response({"Failure": "Incomplete query params"}, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,1.如何定义一个 url 来在 django 中获取查询参数?2. 如何在基于类的视图中捕获参数?
如何创建一个 url 来获取 django 中的查询参数
用于request.GET获取查询参数的字典。参数不应在urls.py.
请参阅文档:https://docs.djangoproject.com/en/3.0/ref/request-response/#django.http.HttpRequest.GET。
问号后面的部分称为查询字符串。它在 中作为类似字典的对象 (a QueryDict)进行处理并可用self.request.GET。
因此您定义为路径
url(r'^meals/search/(?P<user_id>\d+), FilterMealList.as_view()),Run Code Online (Sandbox Code Playgroud)
在您看来,您可以使用以下方法进行过滤:
class FilterMealList(views.APIView):
def get(self, request, **kwargs):
user_id = self.kwargs['user_id']
from_time = self.request.GET.get('from_time')
to_time = self.request.GET.get('to_time')
from_date = self.request.GET.get('from_date')
to_date = self.request.GET.get('to_date')
# …Run Code Online (Sandbox Code Playgroud)