Найти - Пользователи
Полная версия: как вызвать ф-ию представления
Начало » Django » как вызвать ф-ию представления
1 2
terrrible
Вопрос новичка.
На сколько я понял, ф-ии представления вызываются при переходе на определённые url (зависимость прописывается в urls.py). Можно ли вызвать нужную мне ф-ию без перехода куда-либо? Т.е. есть страница, на которой я добавляю записи в БД, жму кнопку, которая вызывает нужную мне ф-ию, добавляющую эти данные в БД, я остаюсь на этой же странице. Какой механизм используется для реализации такого функционала?
Спасибо.
nnmware
Аяксом сделайте.
Только про переход на определенный урл, Вы наверное недопоняли.
Вам урл придется по любому сделать для аякс-запроса.
Просто добавляете записи на странице в БД(полагаю форма), сериализуете ее, делаете ajax post(на этот самый урл, там внутри вьюхи добавляется уже реально в БД и идет ответ тоже json). На странице ловите ответ в этом же скрипте, можно при этом прислать и кусочек html и добавить его на страницу, чтобы на клиенте данные тоже добавленными выглядели.
Я вот тут свой вариант про аякс писал, но это для формы
http://python.su/forum/topic/20799/
А если без формы, то вьюха будет еще проще
def add_data(request):
    try:
        # тут обрабатываем полученные данные.
        # даже если данные пришли с формы можете к ним обращаться request.REQUEST['параметр']
        payload = {'success': True}
    except:
        payload = {'success': False}
    return HttpResponse(json.dumps(payload, cls=LazyEncoder), content_type='application/json')
terrrible
Спасибо, попробую.
А если мне ответ от сервера не нужен, тоже аяксом или не обязательно?
nnmware
А как это “ответ от сервера не нужен”?
По-моему так неправильно. Подтверждение о успехе или ошибке обязательно надо получать.
terrrible
Ну да, я имел в виду, что выводить его мне никуда не нужно.
FishHook
terrrible
Ну да, я имел в виду, что выводить его мне никуда не нужно.
Это уже проблемы клиентской стороны. Если Ваша вьюха не будет вообще возвращать HttpResponse, Джанга будет ругаться на ошибку. Возвращайте пустой HttpResponse.
nnmware
Ну возвращайте success=True хотя бы. Если ответа не будет, этот скрипт все равно будет ожидать ответа от сервера.
А сбрасывать соединие- это явно плохой тон.
terrrible
Я наверное что-то недопонимаю:
ну вот делаю я post на url по которому запускается нужная ф-ия представления, всё ок, но только ведь осущестляется загрузка этой страницы, которую в пост вписывал. Так как выполнить запрос, не переходя никуда?
FishHook
Во-первых, вовсе не обязательно, чтобы сервер возвращал HTML-страницу. Главное, чтобы он вернул валидный HttpResponse.
Во-вторых, если пост отправляешь аяксом, то по получению ответа клиентская сторона не перезагружает страницу, а передает скрипту полученные данные. Что с ними будут делать твой скрипт, твои проблемы. Что ты передашь клиенту в качестве данных, тоже твои проблемы, можешь не передавать ничего.
Вы вообще удосужились хоть что-то прочитать про AJAX?
terrrible
FishHook
Во-первых, вовсе не обязательно, чтобы сервер возвращал HTML-страницу. Главное, чтобы он вернул валидный HttpResponse.Во-вторых, если пост отправляешь аяксом, то по получению ответа клиентская сторона не перезагружает страницу, а передает скрипту полученные данные. Что с ними будут делать твой скрипт, твои проблемы. Что ты передашь клиенту в качестве данных, тоже твои проблемы, можешь не передавать ничего.Вы вообще удосужились хоть что-то прочитать про AJAX?

Да, конечно я удосужился, но механизма с формой не пойму.

Форма, данные которой отправляются в базу имеет атрибут action, вот в нём что должно быть прописано? Если там url (например, /add/), по которому вызывается нужная ф-ия, то всё работает. Если я убираю из экшена этот url, то переход не происходит, но и в базу ничего не добавляется. Может в post я пишу url как-то неправильно?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB