Классифицированные представления: почему параметры URL-адреса в Django/DRF переходят в self.kwargs вместо другого атрибуPython

Программы на Python
Ответить
Anonymous
 Классифицированные представления: почему параметры URL-адреса в Django/DRF переходят в self.kwargs вместо другого атрибу

Сообщение Anonymous »

При работе с Django/Django Rest Framework я заметил несогласованность доступа к параметрам URL в представлениях на основе классов.

Описание проблемы
В представлениях на основе универсальных классов я могу получить доступ к параметрам URL-адреса двумя разными способами — в зависимости от метода:
  • Через позиционные аргументы:
    Например, в методе get я могу получить доступ к параметрам URL-адреса как позиционным аргументам, передаваемым непосредственно в метод:

Код: Выделить всё

#urls.py
path('test///', MyView.as_view())

Код: Выделить всё

#views.py
class MyView(View):
def get(self, request, param1, param2):
return JsonResponse({'param1': param1, 'param2': param2})
  • Через атрибут self.kwargs
    Например, когда я хочу получить доступ к тем же параметрам в get_queryset< /code>, мне нужно использовать self.kwargs

Код: Выделить всё

#views.py
class MyView(ListView):
model = MyModel

def get_queryset(self):
param1 = self.kwargs.get('param1')
param2 = self.kwargs.get('param2')
return MyModel.objects.filter(field1=param1, field2=param2)
Я знаю, что могу получить доступ к параметрам URL из kwargs где угодно, но это приводит меня к некоторым вопросам
Мои вопросы:
  • Почему Django/DRF не представил специальный атрибут для параметров URL? Не было бы более интуитивно понятным хранить эти параметры в специальном атрибуте, таком как self.url_params - есть ли какие-то конкретные причины, по которым предпочтительным является именование self.kwargs - я понял соглашение, но это немного Меня это сбивает с толку, у нас есть много других атрибутов, таких как idk self.data или self.method, но у нас нет атрибутов URL.
    < li>Почему Механизм self.kwargs не описан явно в документации Django. У меня немного болела голова, когда я пытался понять, почему. Кажется, этот механизм имеет решающее значение для работы с представлениями на основе классов, но я не смог найти четкого объяснения, почему это так. Вместо этого в документации приводятся только примеры, по-видимому, ожидающие, что разработчики «сделают вывод», что параметры URL-адреса хранятся в self.kwargs.
Может кто-нибудь пролить свет на то, почему это так? Буду признателен за любые идеи и объяснения этого дизайнерского решения.


Подробнее здесь: https://stackoverflow.com/questions/792 ... elf-kwargs
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»