0

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

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

Cheers.

ответ

1

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

django-emailchange

2

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

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 из моего файла urls.

+0

Извините, если я, кажется, требовательный, но вы пришли через сниппет, который посылает письмо с подтверждением. Я хорошо разбираюсь в Python, но я не реализовал ничего подобного в Django. Благодарю за помощь. –

+0

Попробуйте django-email-подтверждение: http://github.com/jtauber/django-email-confirmation/ – Tom

0

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

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

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

fields = ('email',) 

исправлена ​​проблема