Что / Где изменить django-регистрацию для использования с мобильными брокерами - PullRequest
4 голосов
/ 07 августа 2011

Я использую django-регистрацию на стороне django auth для создания учетной записи моего клиента и входа в систему.

Наш сайт будет использоваться мобильными и настольными пользователями.Мы только начали заниматься идеей мобильных пользователей, загружая различные шаблоны из представления в зависимости от строк пользовательского агента.Это сделано чисто, но я не уверен, что это правильный способ сделать это, потому что мы застряли на том, что делать с представлениями, которые нелегко доступны (которые мы сами не писали).

Это подводит меня к проблеме: я понятия не имею, как справиться с перенаправлением мобильного пользователя от URL-адреса входа, на который его отправляет django-registration / auth (версия для ПК).

Я мог бы изменить тактикуи работать с различными браузерами в файлах шаблонов.Такое чувство, что скоро станет грязно.Мне вообще не нравится эта идея!

Или я остаюсь со своим текущим методом, который заключается в том, чтобы обрабатывать запрос с помощью различных шаблонов, основанных на строках пользовательского агента.Затем мне нужно знать, как я должен иметь дело с django-регистрацией (как загрузить другой набор шаблонов, основанный на строке агента пользователя).Я бы не стал менять код регистрации django, если бы просто было проще обновить модули.

Ответы [ 2 ]

2 голосов
/ 08 августа 2011

Один из методов - просто написать свое собственное представление входа в систему, которое вызывает представление django-registration для выполнения тяжелой работы, но передавая ему другой шаблон в зависимости от контекста:

def login(request, *args, **kwargs):
    my_kwargs = kwargs.copy()
    if <mobile condition>:
        my_kwargs['template_name'] = 'my_app/some_template.html'
    else:
        my_kwargs['template_name'] = 'my_app/some_other_template.html'

    from django.contrib import auth
    return auth.login(request, *args, **my_kwargs)
2 голосов
/ 07 августа 2011

Шаблоны регистрации в Django очень просты и используются очень редко. Я просто рассматриваю их как особые случаи и просто придумаю файл base.html, который достаточно хорошо работает на обеих платформах.

Мои страницы регистрации выглядят очень просто, многие сайты делают это, и это не является неожиданным.

Другой вариант - это нам промежуточное ПО, которое устанавливает каталог шаблонов на основе определения, является ли оно мобильным устройством. Вы можете обнаружить мобильный браузер, подобный этому Определить мобильный браузер (не только iPhone) в представлении Python , а затем иметь промежуточное программное обеспечение, использующее трюк make_tls_property для обновления TEMPLATE_DIRS примерно так:

TEMPLATE_DIRS = settings.__dict__['_wrapped'].__class__.TEMPLATE_DIRS = make_tls_property(settings.TEMPLATE_DIRS)

class MobileMiddleware(object):
    """Sets settings.SITE_ID based on request's domain"""
    def process_request(self, request):
        if *mobile*:
            TEMPLATE_DIRS.value = *mobiletemplates* + settings.BASE_TEMPLATE_DIRS
        else:
            TEMPLATE_DIRS.value = *normaltemplates* + settings.BASE_TEMPLATE_DIRS

Просто чтобы прояснить, make_tls_property, который является частью djangotoolbox, заставляет TEMPLATE_DIRS устанавливать переменную для каждого потока вместо глобальной переменной, чтобы каждый цикл ответа на запрос получал свою собственную "версию" переменной.

...