Я пытаюсь реализовать AJAX в своем приложении Google App Engine, и поэтому я ищу хорошую структуру AJAX, которая поможет мне. У кого-нибудь есть идея?
Я думаю о Google Web Toolkit, насколько он хорош в плане создания AJAX для Google App Engine?
Я пытаюсь реализовать AJAX в своем приложении Google App Engine, и поэтому я ищу хорошую структуру AJAX, которая поможет мне. У кого-нибудь есть идея?
Я думаю о Google Web Toolkit, насколько он хорош в плане создания AJAX для Google App Engine?
Поскольку Google Web Toolkit является подмножеством Java, он лучше всего работает, когда вы также используете Java на бэкэнд. Поскольку Google App Engine в настоящее время только Python, я думаю, вам нужно будет много потрудиться, чтобы заставить вашего сервера и клиента хорошо разговаривать друг к другу.
jQuery, по-видимому, является самой популярной версией библиотеки JavaScript в теге AJAX на DjangoSnippets.com.
Изменить: Вышеупомянутое относится только к приложениям Google App Engine, написанным на Python. Поскольку Google App Engine теперь поддерживает Java, GWT теперь может быть хорошим выбором для написания интерфейса AJAX. В Google даже есть учебное пособие, показывающее, как это сделать.
Хорошим способом использования библиотеки AJAX является использование API API AJAX для библиотек. Это немного быстрее и чище, чем загрузка JS и размещение его в вашей папке /static/
и не есть в вашей квоте диска.
В вашем javascript вы просто положили, например:
google.load("jquery", "1.3.2");
и/или
google.load(google.load("dojo", "1.3.0");
Где-то в вашем заголовке вы бы поставили что-то вроде:
<script src="http://www.google.com/jsapi?key=your-key-here"></script>
И все, что вам нужно, использовать библиотеки API Google.
Нет причин, по которым вы не должны использовать GAE и Google Web Toolkit (GWT) вместе. Вы пишете свой внутренний код в Python и код интерфейса в Java (и, возможно, некоторый JavaScript), который затем скомпилируется в JavaScript. При использовании другой структуры AJAX вы также будете иметь эту разницу между языком сервера и клиента.
В GWT есть функции, которые упрощают удаленный вызов Java-кода на сервере, но это полностью необязательно. Вы можете просто использовать JSON или XML-интерфейсы, как и с другими структурами AJAX.
GWT 1.5 также поставляется с типами перекрытия JavaScript, которые в основном позволяют обрабатывать часть данных JSON, такую как объект Java, при разработке кода на стороне клиента. Вы можете прочитать об этом здесь.
Update:
Теперь, когда Google добавила поддержку Java для Google App Engine, вы можете разрабатывать как бэкэнд, так и внешний код в Java в полном стеке Google - если хотите. Существует хороший плагин Eclipse от Google, который упрощает разработку и развертывание приложений, использующих GAE, GWT или оба.
Вот как мы реализовали Ajax в Google App Engine, но эту идею можно обобщить на другие платформы.
У нас есть обработчик script для запросов Ajax, которые реагируют почти - с ответами JSON. Структура выглядит примерно так (это выдержка из стандартного обработчика GAE script):
def Get(self, user):
self.handleRequest()
def Post(self, user):
self.handleRequest()
def handleRequest(self):
'''
A dictionary that maps an operation name to a command.
aka: a dispatcher map.
'''
operationMap = {'getfriends': [GetFriendsCommand],
'requestfriend': [RequestFriendCommand, [self.request.get('id')]],
'confirmfriend': [ConfirmFriendCommand, [self.request.get('id')]],
'ignorefriendrequest': [IgnoreFriendRequestCommand, [self.request.get('id')]],
'deletefriend': [DeleteFriendCommand, [self.request.get('id')]]}
# Delegate the request to the matching command class here.
Команды представляют собой простую реализацию шаблона команды:
class Command():
""" A simple command pattern.
"""
_valid = False
def validate(self):
""" Validates input. Sanitize user input here.
"""
self._valid = True
def _do_execute(self):
""" Executes the command.
Override this in subclasses.
"""
pass
@property
def valid(self):
return self._valid
def execute(self):
""" Override _do_execute rather than this.
"""
try:
self.validate()
except:
raise
return self._do_execute()
# Make it easy to invoke commands:
# So command() is equivalent to command.execute()
__call__ = execute
На стороне клиента мы создаем делегат Ajax. Prototype.js позволяет легко писать и понимать. Вот выдержка:
/**
* Ajax API
*
* You should create a new instance for every call.
*/
var AjaxAPI = Class.create({
/* Service URL */
url: HOME_PATH+"ajax/",
/* Function to call on results */
resultCallback: null,
/* Function to call on faults. Implementation not shown */
faultCallback: null,
/* Constructor/Initializer */
initialize: function(resultCallback, faultCallback){
this.resultCallback = resultCallback;
this.faultCallback = faultCallback;
},
requestFriend: function(friendId){
return new Ajax.Request(this.url + '?op=requestFriend',
{method: 'post',
parameters: {'id': friendId},
onComplete: this.resultCallback
});
},
getFriends: function(){
return new Ajax.Request(this.url + '?op=getfriends',
{method: 'get',
onComplete: this.resultCallback
});
}
});
чтобы вызвать делегата, вы делаете что-то вроде:
new AjaxApi(resultHandlerFunction, faultHandlerFunction).getFriends()
Надеюсь, это поможет!
Я бы порекомендовал вам взглянуть на чистую структуру javascript (возможно, JQuery) для вашего клиентского кода и написать JSON-сервисы на python - это, пожалуй, самый простой/лучший способ.
Google Web Toolkit позволяет писать UI в Java и компилировать его в javascript. Как говорит Дэйв, это может быть лучший выбор, где бэкэнд находится на Java, поскольку в этом случае у него хорошие крючки RPC.
В моем блоге я имею дело с простым способом сделать это - ссылка: AJAX с Google App Engine. Я включаю весь код javascript и python, который я использовал.
Возможно, вы захотите посмотреть на Pajamas (http://pyjs.org/), который является "GWT для Python".
попробуйте также GQuery для GWT. Это код Java:
public void onModuleLoad() {
$("div").css("color", "red").click(new Function() {
public void f(Element e) {
Window.alert("Hello");
$(e).as(Effects).fadeOut();
}
});
}
Быть Java-кодом, что приводит к несколько дорогостоящим оптимизациям компиляции (Java- > JavaScript) и упрощению рефакторинга.
Приятно, это не?
jQuery - прекрасная библиотека, но также проверьте Prototype JavaScript framework. Это действительно превращает JavaScript в случайный неловкий язык на красивый и элегантный язык.
Если вы хотите иметь возможность вызывать вызовы методов с JavaScript на Python, JSON-RPC хорошо работает с Google App Engine. См. Статью Google, "" Использование AJAX для включения запросов клиента RPC", для получения более подробной информации.
В настоящее время я использую JQuery для своего приложения GAE, и он отлично работает для меня. У меня есть диаграмма (диаграммы Google), которая является динамической и использует вызов Ajax для захвата строки JSON. Кажется, что это отлично работает для меня.
Недавно Google анонсировала Java-версию Google App Engine. В этом выпуске также предусмотрен плагин Eclipse, который упрощает разработку приложений GAE с GWT.
Подробнее см.: http://code.google.com/appengine/docs/java/overview.html
Конечно, вам потребуется переписать ваше приложение на Java вместо python, но, как и кто-то, кто работал с GWT, позвольте мне сказать вам, преимущества использования современной IDE на вашей кодовой базе AJAX вполне достойны.