繁体   English   中英

无法更改帐户详细信息,也无法在编辑后发送 email - Django

[英]Not able to change account details and not sending email once edited - Django

So... My main intention is that when a user edits his/her account and changes the email, the system has to change all the other info except email and send an email to the new email (inputted by the user) with a confirmation关联。 一旦单击,系统必须将用户重定向到另一个页面并更改该帐户的 email。 请告诉我我该怎么做。

我的观点:

class NormalUserEditView(generic.UpdateView):
form_class = EditProfileFormNormal
template_name = 'authentication/edit_normalprofile.html'
success_url = reverse_lazy('profile')

def form_valid(self, form):
    messages.success(self.request, f'Account Edit: Successful')
    return super().form_valid(form)

def get_object(self):
    return self.request.user

对于 email 我指的是这个观点:

def register_user(request):
if request.method == "POST":
    form = RegisterUserForm(request.POST)
    if form.is_valid():
        myuser = User.objects.create_user(
            username=form.cleaned_data['username'],
            first_name=form.cleaned_data['first_name'],
            last_name=form.cleaned_data['last_name'],
            email=form.cleaned_data['email'],
            password=form.cleaned_data['password1'],
            )
        myuser.is_active = False
        myuser.save()

        # "Thank You For Registering" Email
        subject = "Welcome To some website"
        body = "Hello " + myuser.first_name + "!\n" + "Thank you for registering to some website. Your account has been registered. However, it has not been activated. We have sent you another email that contains a link. In order to activate your account you must click on that link. The email will be sent shortly. \nNOTE: If you have not created an account in some website, please ignore this email. \n \nsome website."
        from_email = settings.EMAIL_HOST_USER
        to_list = [myuser.email]

        send_mail(subject, body, from_email, to_list, fail_silently=True)

        # Confirm Email

        current_site = get_current_site(request)
        email_subject = "Confirm Your Email - some website"
        email_message = render_to_string('authentication/email_confirmation.html', {
                'name': myuser.first_name,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(myuser.pk)),
                'token': generate_token.make_token(myuser),
            })
        email = EmailMessage(
            email_subject,
            email_message,
            settings.EMAIL_HOST_USER,
            [myuser.email],
            )
        email.fail_silently=True
        email.send()

        messages.success(request, ("Registration: Successful!"))

        return redirect('confirm-address-page')
else:
    form = RegisterUserForm()

return render(request, 'authentication/register.html', {
    'form':form,
    })

这用于生成令牌:

from django.contrib.auth.tokens import PasswordResetTokenGenerator
from six import text_type

class TokenGenerator(PasswordResetTokenGenerator):
    def _make_hash_value(self,user,timestamp):
        return (
        text_type(user.pk) + text_type(timestamp) 
        # text_type(user.profile.signup_confirmation)
        )

generate_token = TokenGenerator()

这适用于 forms:

class RegisterUserForm(UserCreationForm):
email = forms.EmailField(widget=forms.EmailInput(attrs={'class': 'form-control'}))
first_name = forms.CharField(max_length=50, widget=forms.TextInput(attrs={'class': 'form-control'}))
last_name = forms.CharField(max_length=50, widget=forms.TextInput(attrs={'class': 'form-control'}))

class Meta:
    model = User
    fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')

def __init__(self, *args, **kwargs):
    super(RegisterUserForm, self).__init__(*args, **kwargs)

    self.fields['username'].widget.attrs['class'] = 'form-control'
    self.fields['password1'].widget.attrs['class'] = 'form-control'
    self.fields['password2'].widget.attrs['class'] = 'form-control'

email_confirmation.html:

{% autoescape off %}

Welcome to Some Website

Hello {{ name }}!

Please Confirm your email by clicking on the following link:

Confirmation Link:

http://{{ domain }}{% url 'activate' uidb64=uid token=token %}

{% endautoescape %}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM