0

嗨,我想从 django 管理面板创建用户帐户,然后使用模型中存储的电子邮件和密码登录?

def login_view(request):

     context = {}

     user = request.user
     if user.is_authenticated:
        return redirect("home")

     if request.POST:
        form = AccountAuthenticationForm(request.POST)
        if form.is_valid():
            email = request.POST['email']
            password = request.POST['password']
            user = authenticate(email=email, password=password)

            if user:
                login(request, user)
                return redirect("home")

     else:
        form = AccountAuthenticationForm()

     context['login_form'] = form
     return render(request, 'login.html', context)

表格.py

    class AccountAuthenticationForm(forms.ModelForm):'
         password = forms.CharField(label='Password', widget=forms.PasswordInput)
         class Meta:
             model=Account
             fields = ('email', 'password')
         def clean(self):
             if self.is_valid():
                  email = self.cleaned_data['email']
                  password = self.cleaned_data['password']
             if not authenticate(email=email, password=password):
                  raise forms.ValidationError("Invalid login")

模型.py

    from django.db import models
    from django.contrib.auth.models import AbstractBaseUser, BaseUserManager


   class MyAccountManager(BaseUserManager):
           def create_user(self, email, username, password=None):
                 if not email:
                     raise ValueError("Users must have an email address")

            user  = self.model(
                   email=self.normalize_email(email))

    user.set_password(password)
    user.save(using=self._db)
    return user

def create_superuser(self, email, username, password):
    user  = self.create_user(
            email=self.normalize_email(email),
            password=password,
            username=username,
        )
    user.is_admin = True
    user.is_staff = True
    user.is_superuser = True
    user.save(using=self._db)
    return user


    class Account(AbstractBaseUser):
         email = models.EmailField(verbose_name="email", max_length=60, unique=True)
         username = models.CharField(max_length=30, unique=True)
         date_joined=models.DateTimeField(verbose_name='datejoined',auto_now_add=True)
         last_login= models.DateTimeField(verbose_name='last login', auto_now=True)
         is_admin= models.BooleanField(default=False)
         is_active= models.BooleanField(default=True)
         is_staff= models.BooleanField(default=False)
         is_superuser= models.BooleanField(default=False)


        USERNAME_FIELD = 'email'
        REQUIRED_FIELDS = ['username']

        objects = MyAccountManager()

        def __str__(self):
            return self.email

        def has_perm(self, perm, obj=None):
            return self.is_admin

        def has_module_perms(self, app_label):
            return True

请忽略缩进,因为我是第一次接触堆栈溢出和上传代码,所以有点混乱。

任何形式的帮助将不胜感激。

4

0 回答 0