Я неплохо справляюсь с Django & Python, только что заработала функция поиска. Но я не уверен в своей следующей проблеме.
У меня есть функция, которая подключается к Amazon S3 и сохраняет ключи в моей базе данных. В настоящее время я запускаю это при отображении страницы, но мне нужна кнопка, которая выполняет этот вызов, так что это будет похоже на кнопку обновления для обновления базы данных самым последним содержимым.
Действие по поиску переходит к /search/
, поэтому URL-адреса позаботятся о том, чтобы предоставить этот шаблон и представление для запуска поискового кода. Но если моя форма обновления имеет действие = "." и должны изменить страницу, как вы указываете на функцию? (Я использую общие представления)
Вероятно, было бы неплохо отобразить результаты функции на экране, но сначала я просто хочу понять, как вы вызываете функцию, которая не обязательно показывает пользователю что-либо.
Моя функция довольно проста (и да, я сначала добавил это выражение if, когда пытаюсь это реализовать):
def updateRevFromS3(request):
if ('r' in request.POST) and request.POST['r'].stript():
s3 = boto.connect_s3(
settings.AWS_ACCESS_KEY_ID,
settings.AWS_SECRET_ACCESS_KEY) # Connect to Amazon S3
b = s3.get_bucket(
settings.AWS_STORAGE_BUCKET_NAME) # Find existing bucket to store data
revision = b.list(prefix="{{ update_revision }}")
for key in revision:
# download values to db
try:
obj = screenshots.objects.get(imgUrl=key.name,
mod_date=key.last_modified)
except screenshots.DoesNotExist:
obj = screenshots(imgUrl=key.name,
meta=key.metadata,
mod_date=key.last_modified)
obj.save()
print "Saving: " + key.name
else:
print key.name + " already exists."
И моя форма:
<form action="." method="get" id="updateForm">{% csrf_token %}
<label>Update images for revision:</label><br/>
<input type="text" name="r" value="{{ update_revision|escape }}"/>
<input type="submit" value="Update" />
</form>
Следующим шагом будет предоставление пользователю обратной связи в результате, но я вернусь к этому после того, как смогу вызвать функцию! Спасибо:)
обновление
Я добавил jQ, чтобы поймать форму обновления (я поставил предупреждение, чтобы проверить это);
<script type="text/javascript">
$("#updateForm").bind("submit", function () {
$.post(ajax_url, {r: $(this).find('[name="r"]').val()}, function (data) {
// nothing here for now, but this is where you could update the UI, etc.
});
return false;
});
</script>
И мой вид по умолчанию выглядит следующим образом (это всегда падает до окончательного возврата);
def index(request):
if request.is_ajax():
print "is ajax"
return updateRevFromS3(request)
elif request.POST.get('r') == "updateForm":
print "is post"
return updateRevFromS3(request)
print "not ajax or post"
return render_to_response("base.html", RequestContext(request))
Как будто я не представляю, что я на самом деле делаю с этим, я не уверен, почему мое окно консоли показывает запросы GET и POST при каждой загрузке страницы. Если это так, почему индексное представление не возвращает updateRevFromS3()
?