Python, отделяющий запросы Ajax от обычных просмотров страниц - PullRequest
3 голосов
/ 18 ноября 2010

Мне интересно, какие стратегии вы придумали, имея дело с этим.Я новичок в фреймворке python / django и хотел бы отделить обработку представления от обработки ajax-запросов (xhr).

Я имею в виду отдельный файл xhrHandler.py и конкретный маршрутPOST / GET запрашивает / xhr / methodname, а затем делегирует методы views.py, чтобы вернуть представление, передаваемое вдоль httprequest для обработки представления.

Мысли?

1 Ответ

3 голосов
/ 18 ноября 2010

Отметьте request.is_ajax() и делегируйте, где вам нужно. Пример обработчика:

def view_something(request):
    if request.is_ajax():
       # ajax
    else
       # not

Теперь вы можете вызывать разные функции (в разных файлах) для двух случаев.

Если вы хотите быть хитрее, используйте декоратор для обработчика, который будет отправлять запросы ajaxy в другое место:

def reroute_ajaxy(ajax_handler):
    def wrap(f):
        def decorate(*args, **kwargs):
            if args[0].is_ajax():
                return ajax_handler(args)
            else:
                return f(*args, **kwargs)
        return decorate
    return wrap

def score_ajax_handler(request):
    print "score ajax handler"


@reroute_ajaxy(score_ajax_handler)
def score_handler(request):
    print "score handler"

И пробное тестирование, чтобы это осуществить:

class ReqMock:
    def __init__(self, ajax=False):
        self.ajax = ajax
    def is_ajax(self):
        return self.ajax


score_handler(ReqMock(True))
score_handler(ReqMock(False))

Производит:

score ajax handler
score handler
...