Страница профиля получает доступ к объекту пользователя в Django

У меня есть требование, когда я должен сначала зарегистрировать пользователей по электронной почте. Итак, я пошел с django-registraton, и мне удалось интегрировать модуль tat в мой проект django. После успешного входа страница перенаправляется на «registration/profile.html». Мне нужно получить доступ к объекту пользователя, который использовался при аутентификации. Мне нужен этот объект, чтобы внести изменения в модель, которая содержит информацию о пользовательском профиле моих пользователей. Я уже определил это в своих моделях.py

Вот URL-адрес, который я использую для перенаправления на мой шаблон.

url(r'^profile/$',direct_to_template,{'template':'registration/profile.html'}),

Итак, мой вопрос заключается в следующем... после входа в систему пользователь должен перейти на страницу профиля, которую необходимо заполнить. Любые мысли о том, как я могу этого добиться?


person Sharath    schedule 18.03.2010    source источник


Ответы (1)


Я устанавливал что-то подобное ранее. В моем случае я определил новых пользователей через интерфейс администратора, но основная проблема осталась прежней. Мне нужно было показать определенную страницу (например, настройки пользователя) при первом входе в систему.

В итоге я добавил флаг (first_log_in, BooleanField) в модель UserProfile. Я настроил проверку для этого в функции просмотра моей главной страницы, которая обрабатывает маршрутизацию. Вот сырая идея.

просмотров.py:

def get_user_profile(request):
    # this creates user profile and attaches it to an user
    # if one is not found already
    try:
        user_profile = request.user.get_profile()
    except:
        user_profile = UserProfile(user=request.user)
        user_profile.save()

    return user_profile

# route from your urls.py to this view function! rename if needed
def frontpage(request):
    # just some auth stuff. it's probably nicer to handle this elsewhere
    # (use decorator or some other solution :) )
    if not request.user.is_authenticated():
        return HttpResponseRedirect('/login/')

    user_profile = get_user_profile(request)

    if user_profile.first_log_in:
        user_profile.first_log_in = False
        user_profile.save()

        return HttpResponseRedirect('/profile/')

    return HttpResponseRedirect('/frontpage'')

модели.ру:

from django.db import models

class UserProfile(models.Model):
    first_log_in = models.BooleanField(default=True, editable=False)
    ... # add the rest of your user settings here

Важно, чтобы вы установили AUTH_PROFILE_MODULE в файле settings.py, чтобы он указывал на модель. Т.е.

AUTH_PROFILE_MODULE = 'your_app.UserProfile'

должно сработать.

Взгляните на эту статью для дальнейшего ознакомления с UserProfile. Надеюсь, это поможет. :)

person Juho Vepsäläinen    schedule 18.03.2010
comment
Итак, ваше предложение состоит в том, чтобы добавить эти методы в пользовательскую модель UserOption, не так ли? и внести изменения в параметр действия формы для вызова, например, frontpage rgt? Я немного новичок в django .. так что, если бы вы могли уточнить .. будет полезно .. - person Sharath; 19.03.2010
comment
Я немного расширил ответ. Надеюсь, теперь стало более понятно. :) - person Juho Vepsäläinen; 19.03.2010
comment
о, извините .. пропустил заголовок views.py ... :P Большое спасибо .. вы были очень полезны .. - person Sharath; 19.03.2010