django 如何将数据库中的用户名保存为电子邮件?>

sf6xfgos  于 2022-11-26  发布在  Go
关注(0)|答案(1)|浏览(116)

我想要一个注册页面有3个字段(电子邮件,密码和重复密码)。我的目标是,当用户输入的电子邮件地址,它也保存在数据库中作为一个用户名。我会超级高兴,如果有人能帮助我,我已经坐了x小时试图解决这个问题。非常感谢!
model.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    email_confirmed = models.BooleanField(default=False)

@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
        instance.profile.save()

forms.py

class CreateUserForm(UserCreationForm):
    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']


# Sign Up Form
class SignUpForm(UserCreationForm):
   # first_name = forms.CharField(max_length=30, required=False, help_text='Optional')
   # last_name = forms.CharField(max_length=30, required=False, help_text='Optional')
    email = forms.EmailField(max_length=254, help_text='Enter a valid email address')

    class Meta:
        model = User
        fields = [
            'username',
            'password1',
            'password2',
            ]

views.py

from django.contrib import messages
from django.contrib.auth.models import Group
from django.contrib.sites.shortcuts import get_current_site
from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_encode
from django.template.loader import render_to_string
from .token import AccountActivationTokenGenerator, account_activation_token
from django.shortcuts import render, redirect
from .forms import *
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth import get_user_model, login
from django.utils.http import urlsafe_base64_decode
from django.views.generic import View, UpdateView
from django.contrib.auth.decorators import login_required
from .decorators import *
from django.urls import reverse_lazy
from django.utils.encoding import force_str

@unauthenticatedUser
def Example_login(request):

      if request.method == 'POST':
        email = request.POST.get('email')
        password = request.POST.get('password')

        user = authenticate(request, username=email, password=password)

        if user is not None:
            login(request, user)
            return redirect('Example_dashboard')
        else:
            messages.info(request, 'Username OR password is incorrecct')

      context = {}
      return render(request, 'accounds/templates/Example_login.html', context)



def reset_passwrd(request):

    return render(request, "reset_password.html")



@login_required(login_url='login')
def Example_dashboard(request):
    form = MembersForm()
    current_user = request.user
    name = current_user.username.split(".")[0]




    context = {'form': form, "cunrrent_user": name}
    return render(request, 'example_dashboard.html', context)








def Login(request):
    if request.method == 'POST':
        email = request.POST.get('Benutzername')
        password = request.POST.get('Passwort')

        user = authenticate(request, username=email, password=password)

        if user is not None:
            login(request, user)
            return redirect('Example_dashboard')
        else:
            messages.info(request, 'Username OR password is incorrecct')
    return render(request, "login.html")



def logoutUser(request):
    logout(request)
    return redirect('login')



def registrierung(request):
    return render(request, "registrierung.html")



@unauthenticatedUser
def Example_register(request):

    form = CreateUserForm()
    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        if form.is_valid():
            user = form.save()
            #username = form.cleaned_data.get('usernname')

            group = Group.objects.get(name='studends')
            user.groups.add(group)
            messages.success(request, 'Account was created' )
            return redirect('login')
    contex = {'form' : form}



    return render(request, 'exampl_register.html',contex)




# Sign Up View
class SignUpView(View):
    form_class = SignUpForm
    template_name = 'signup.html'

    def get(self, request, *args, **kwargs):
        form = self.form_class()
        return render(request, self.template_name, {'form': form})

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():

            user = form.save(commit=False)
            user.is_active = False # Deactivate account till it is confirmed

            user.save()

            current_site = get_current_site(request)
            subject = 'Activate Your MySite Account'
            message = render_to_string('account_activation_email.html', {
                'user': user,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                'token': account_activation_token.make_token(user),
            })
            user.email_user(subject, message)

            messages.success(request, ('Please Confirm your email to complete registration.'))

            return redirect('login')

        return render(request, self.template_name, {'form': form})

class ActivateAccount(View):

    def get(self, request, uidb64, token, *args, **kwargs):
        try:
            uid = force_str(urlsafe_base64_decode(uidb64))
            user = User.objects.get(pk=uid)
        except (TypeError, ValueError, OverflowError, User.DoesNotExist):
            user = None

        if user is not None and account_activation_token.check_token(user, token):
            user.is_active = True
            user.profile.email_confirmed = True
            user.save()
            login(request, user)
            messages.success(request, ('Your account have been confirmed.'))
            return redirect('login')
        else:
            messages.warning(request, ('The confirmation link was invalid, possibly because it has already been used.'))
            return redirect('login')

我需要你的帮助

qhhrdooz

qhhrdooz1#

如果要使用email而不是默认的username,则必须用自定义模型覆盖默认的User模型

from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin

class User(AbstractBaseUser, PermissionsMixin):
    # Use the email for logging in
    email = models.EmailField(max_length=254, unique=True)

    USERNAME_FIELD = 'email'

相关问题