Как обрабатывать методы запроса в представлениях на основе функций в Django

По мере изучения Django у меня возникли вопросы по поводу обработки методов запроса для function-based views (FBVs) в Django.

Что я нашел для FBVs:

URLconf не смотрит на метод запроса. Другими словами, все методы запроса - POST, GET, HEAD и т.д. - будут направлены в одну и ту же функцию для одного и того же URL.

из URL-Dispatcher.

require_http_methods(request_method_list)¶ Декоратор, требующий, чтобы представление принимало только определенные методы запроса

из View Decorators

Значит ли это, что я могу ограничить 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.

Вернуться на верх