Генерируйте объекты JavaScript из моделей Django
-
03-07-2019 - |
Вопрос
Я выполняю большую работу с JavaScript в браузере и хотел бы иметь часть этой серверной функциональности во внешнем интерфейсе.В частности, было бы неплохо иметь функции get()
, save()
, all()
и count()
доступно для клиента.Кроме того, было бы здорово, если бы список полей модели уже был доступен в сгенерированном объекте JavaScript.
Может ли текущий пользователь читать или записывать записи - это отдельный вопрос, с которым я разберусь, используя аутентификацию Django.На данный момент поиск был бы началом.
Короче говоря, есть ли код, который сгенерировал бы модель JavaScript из модели Django?
Спасибо.
Решение
Похоже, вы ищете полный JavaScript-интерфейс для API-интерфейсов model и queryset.Я не могу себе представить, что это когда-либо было сделано или даже было простой задачей.Вам не только нужно было бы каким-то образом генерировать экземпляры моделей на JavaScript (гораздо больше, чем обеспечивает сериализация JSON, поскольку вам также нужны методы), но вам нужно было бы предоставить веб-сервис, который может обрабатывать все виды вызовов DB-API.Я даже не могу представить, с чего начать, а проблем с безопасностью может быть слишком много, чтобы их можно было легко преодолеть.
Альтернативным (и гораздо более простым) подходом было бы использование одного из различных модулей Django REST и сериализации JSON.Вы могли бы выполнить запрос AJAX GET к ресурсу, который может быть идентифицирован с помощью ряда параметров запроса, которые были бы эквивалентны цепным фильтрам набора запросов.Это вернет JSON-представление значений модели.Затем вы можете изменить объект JavaScript и использовать перегруженный запрос AJAX POST, чтобы сохранить изменения обратно на сервер.У вас не было бы доступа к методам модели, поэтому эту функциональность пришлось бы реализовать заново, но внесение любых изменений в модель должно быть достаточно простым - по сути, это JavaScript-эквивалент использования HTML-формы для изменения данных.
Другие советы
Вам нужен сериализатор данных.Вы можете сделать это с помощью встроенных в django сериализаторов.Это задокументировано на официальном сайте django. djangoproject_topics-сериализация
Я запустил проект, который, как мне кажется, делает именно то, что вы ищете.Вы можете найти его по адресу
github_bumby_jslib.
В настоящее время он поддерживает только get (), но я надеюсь расширить это в ближайшее время.Не стесняйтесь вносить исправления :)
jslib - это приложение Django, направленное на упрощение интеграции AJAX с вашими проектами Django.
Это звучит так, как будто ты хочешь Кодирование в формате JSON ваши объектные данные.Видишь JSON.org подробнее о формате данных см. здесь.
Итак, прошло некоторое время с тех пор, как я опубликовал первоначальный вопрос, и с тех пор в Джанголенде произошел ряд событий.Не в последнюю очередь это отличная маленькая библиотека под названием Django REST Framework.Я буду использовать его в новом проекте, и он выглядит довольно привлекательно.