Публичный профиль и личный кабинет по одной ссылке

категория: Django
Давненько я ничего не писал, решил чаво-то накатать. Была у меня такая задачка: Пользователь должен иметь ссылку как в соц.сетях типа: domain.com/acman, и чтобы при заходе по такой ссылке он попадал в личный кабинет, а если другой пользователь зайдет по его ссылке или не зарегистрированный - то попадает на его публичный профиль. Ну и плюс там куча еще фильтров, категорий - это не важно. Ссылки получились вот такого типа:
url(r'^(?P<username>[\w.@+-]+)/(?P<filter_by>\w+)/(?P<category>[-\w]+)$', 
    'dispatch_user', name='profile'),
url(r'^(?P<username>[\w.@+-]+)/(?P<filter_by>\w+)/$', 'dispatch_user', 
    name='profile'),
url(r'^(?P<username>\w.@+-]+)/$', 'dispatch_user', name='profile'),
как из ссылок видно, что обрабатывать куда послать пользователя будет промежуточная вьюшка dispatch_user, которая будет связным между публичным профилем и личным кабинетом. И выглядит она довольно элементарно:
def dispatch_user(request, username, **kwargs):
    user_for_profile = get_object_or_404(get_user_model(), 
        username=username)
    if user_for_profile == request.user:
        return profile(request, username, **kwargs)
    else:
        return public_profile(request, username, **kwargs)
берем из ссылки username, сравниваем с пользователем отправившим запрос и вызывает то или иное представление.


blog comments powered by Disqus