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

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

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

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

Ответы [ 3 ]

2 голосов
/ 17 апреля 2010

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

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.

1 голос
/ 18 апреля 2010

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

Джанго-emailchange

0 голосов
/ 17 мая 2012

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

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

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

fields = ('email',) 

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

...