Изменить электронную почту пользователя в Django без использования django-профилей

В моем приложении Django я бы хотел, чтобы пользователь мог изменить адрес электронной почты. Я видел решение Stackru, указывающее людям на django-профили. К сожалению, я не хочу использовать полноценный модуль профиля, чтобы выполнить крошечный подвиг изменения электронной почты пользователей. Кто-нибудь видел это реализовано где-нибудь. Процедура проверки адреса электронной почты путем отправки подтверждающего электронного письма является обязательной в этом сценарии.

Я потратил много времени, пытаясь найти решение, которое работает, но безрезультатно.

Приветствия.

3 ответа

Решение

Кажется, что кто-то написал свои собственные. Это позволяет пользователям изменять свои адреса электронной почты и отправляет письма с подтверждением.

Джанго-emailchange

Адрес электронной почты принадлежит модели пользователя, поэтому нет необходимости использовать профили, чтобы пользователи могли обновлять свою электронную почту. Создайте форму модели из пользовательской модели, в которой в качестве поля используется только электронная почта, затем предоставьте эту форму в своем представлении и обработайте ее. Что-то вроде:

class UserInfoForm(forms.ModelForm):
    email = forms.EmailField(required=True)
    class Meta:
        model = User
        fields = ('email',)

def my_view(request):
    if request.POST:
        user_form = UserInfoForm(request.POST, instance=request.user)
        if user_form.is_valid():
            user_form.save()
            return HttpResponseRedirect(reverse('form_success_screen'))
    else:
        user_form = UserInfoForm()
    return render_to_response('my-template.html', {'user_form': user_form}, context_instance=RequestContext(request))

Обратите внимание, что если форма успешна, я возвращаю HttpResponseRedirect, чтобы отправить пользователя на другую страницу. В этом случае я ищу названный URL из моего файла URL.

Не совсем уверен, что это новое требование Django 1.4, но я попробовал предложение Тома:

class UserInfoForm(forms.ModelForm):
    email = forms.EmailField(required=True)
    class Meta:
        model = User
        fields = ('email')

и получил ошибку поля. Вы должны иметь запятую после каждого поля (или вот что решило мою ошибку):

fields = ('email',) 

исправил проблему

Другие вопросы по тегам