У меня есть проект Django, который требует обновления страницы каждый раз, когда я хочу обновить содержимое. В настоящее время он использует встроенные Django представления на основе классов, которые, в свою очередь, используют шаблоны.
Я хочу начать реализовывать некоторые javascript вызовы для обновления sh таблиц / форм / модальных windows с новыми данные, в основном в ответ на нажатия кнопок. Я пытаюсь использовать Vue для достижения sh этого, и я создал Django REST Framework для облегчения этого.
У меня есть простой класс 'Hello world' vue, работающий где данные жестко закодированы в поле данных класса Vue. Я не могу сделать скачок для получения данных из API, хотя. Я получаю несанкционированный ответ. Я использую vue -ресурс для вызова HTTP API.
У меня есть модульные тесты, где я вызываю API из DRF APITestCase, используя self.client.get ('api / path'), и они работают как и ожидалось (неавторизовано, когда нет аутентифицированного пользователя, прикрепленного к запросу, авторизовано, когда есть).
Я отладил в классе разрешений DRF, чтобы увидеть, почему в запросе отказано, и это потому, что нет аутентифицированного Пользователь прикреплен к запросу.
Я добавил SessionAuthentication в DEFAULT_AUTHENTICATION_CLASSES в настройках.
Мой вопрос: как добавить аутентифицированного пользователя в запрос, чтобы при методе Vue вызывается из моего веб-приложения, запрос API будет авторизован?
Я не уверен, что это усложняет ситуацию, но я использую пользовательскую модель в Django для аутентификации.
Я надеюсь начать с внедрения нескольких элементов управления Vue на моем веб-сайте, например, таблицы и формы упоминаются редактор Я не хочу превращать это в одностраничное приложение. Я хотел бы продолжить использовать Django представления для аутентификации пользователя.
Мой Vue код выглядит так;
new Vue({
delimiters: ['${', '}$'],
el: '.events-table',
data: {
message: 'Hello Vue!',
demo: [
{ id: 5 },
{ id: 2 },
{ id: 3 },
],
events: [],
},
http: {
root: 'http://localhost:8000',
},
methods: {
getEvents: function () {
this.$http.get('api/eventlog/events/?format=json').then(
function (data, status, request) {
if (status == 200) {
this.events = data.body.results;
}
}
)
}
},
mounted: function () {
this.getEvents();
}
})