Как обрабатывать методы запроса в представлениях на основе функций в Django
По мере изучения Django у меня возникли вопросы по поводу обработки методов запроса для function-based views (FBVs) в Django.
Что я нашел для FBVs:
URLconf не смотрит на метод запроса. Другими словами, все методы запроса - POST, GET, HEAD и т.д. - будут направлены в одну и ту же функцию для одного и того же URL.
из URL-Dispatcher.
require_http_methods(request_method_list)¶ Декоратор, требующий, чтобы представление принимало только определенные методы запроса
Значит ли это, что я могу ограничить URL
, определенный в urls.py
функцией, которая в свою очередь принимает только скажем PUT
-Requests и в случае, если я захочу обработать DELETE
, то URL
будет потрачен впустую, так как я ограничил его PUT
?
Или иначе, я должен "отправлять" себя в пределах FBV?
Например, при request.method == 'PUT'
Альтернатива для CBVs
Организация кода, связанного с определенными методами HTTP (GET, POST и т.д.), может быть решена отдельными методами вместо условного ветвления.
из Введение в представления на основе классов
Значит ли это, что если я хочу обрабатывать PUT
или DELETE
в отдельных функциях, я должен
a) использовать представление, основанное на классах, с глаголами, реализуемыми как put()
и delete()
b) использовать DjangoResteFramework только для наличия APIViews и @api_view(['Put'])
в качестве декоратора для FBVs?
Вы можете использовать обычный FBV. Я думаю, что это не очень хорошо в Django, но вы можете:
def myFunctionView(request, *args, **kwargs):
match request.method:
case "GET":
# do some stuff
return response_for_get
case "DELETE":
# do some stuff
return response_for_delete
case "PATCH":
# do some stuff
return response_for_path
case _: # post, put, option e.t.c
# do some stuff
return response_for_post
Это полностью противоречит философии Django, но это возможно. Вы можете сделать декоратор для отправки статуса "метод не разрешен" для некоторых request.methods. Вы можете использовать этот декоратор в urls.py. Но я не понимаю, почему вы хотите избежать GCBV, лучшей части Django views.