Обработка ошибок с использованием JQuery Terminal Plugin и Django с jsonrpc

Просто развлекаюсь и пытаюсь выучить JQuery и Django одновременно. Я думал, что было бы неплохо написать терминальное приложение на основе браузера.

Вот фон:

Моя консольная страница выглядит так:

{% load staticfiles %}
<!DOCTYPE HTML>
<html>
  <head>
    <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
    <script src="{% static "goat/jquery.terminal-0.7.10.min.js" %}"></script>
    <link rel="stylesheet" type="text/css" href="{% static "goat/jquery.terminal.css" %}">
  </head>
<body>
    <div id="term"></div>
<script>
jQuery(function($) {
    $('#term').terminal("http://goatgruff.com/json/", {
        greetings: "Menu: (R)egister (L)ogin"});
});

</script>
</body>
</html>

Мой json views.py использует те же примеры, что и json-rpc...

from jsonrpc import jsonrpc_method

    @jsonrpc_method('sayHello')
    def whats_the_time(request, name='Lester'):
      return "Hello %s" % name

    @jsonrpc_method('gimmeThat', authenticated=True)
    def something_special(request, secret_data):
      return {'sauce': ['authenticated', 'sauce']}

Здорово. Итак, вопрос:

Когда я набираю в терминале "sayHello Matt", вызов Ajax работает и отвечает "Hello Matt". Просто душка Но если я ввожу метод, которого нет в views.py, я получаю ужасную ошибку AJAX.

Я хотел бы хорошо обработать эту ошибку и сказать пользователю, что нет метода. Так как я должен называть методы в представлении, у меня не может быть обработчика ошибок там. Интересно, должен ли я добавить try / catch в urls.py или мой JQuery должен обработать ошибку, анализируя все, что возвращается - я не уверен, как будет выглядеть этот объект и как я получу результат.

Несколько указателей в правильном направлении помогут мне учиться.

Спасибо,

Matt

1 ответ

Решение

Хорошо, я понял это самостоятельно. Сначала я начал играть в файле exceptions.py в jsonrpc. Но вместо того, чтобы переопределять сообщения об ошибках, поступающие от jsonrpc, лучше просто сделать простой ответ об ошибке из JQuery Terminal. Поэтому я просто прокомментировал более информативный ответ и возвратил общую "недопустимую команду", чтобы пользователь не видел многословия, которое он не понимал.

      function make_basic_json_rpc_interpreter(url) {
        var service = function(method, params) {
            self.pause();
            $.jrpc(url, method, params, function(json) {
                if (!json.error) {
                    display_object(json.result);
                } else {
                    self.error('&#91;RPC&#93; ' + json.error.message);
                }
                self.resume();
            }, function(xhr, status, error) {
                if (status !== 'abort') {
                    //self.error('&#91;AJAX&#93; ' + status +
                    //               ' - Server reponse is: \n' +
                    //               xhr.responseText);
                    self.error('Invalid Command');
                }
                self.resume();
            });
Другие вопросы по тегам