如何从自定义模型登录Django

时间:2019-11-29 06:28:24

标签: python django authentication django-authentication

This is my table of register user photo

这是model.py

class SignupUser(models.Model):
    name = models.CharField(max_length=100)
    username = models.CharField(max_length=20)
    email = models.CharField(max_length=100)
    password = models.CharField(max_length=20)

    def __str__(self):
        return self.username

这是我的views.py,用于通过该注册用户登录我的帐户页面

def login_page(request):
    '''
    what code i write here ??
    '''

    context = {'form': SignupForm}
    return render(request, 'signup.html', context)

请在我的login_page方法上解决我的views.py代码。

2 个答案:

答案 0 :(得分:0)

from django.contrib.auth import logout, login as auth_login, authenticate
import logging as L

def login_page(request):
    post_data = request.POST
    user = authenticate(username=post_data['email'], password=post_data['password'])
    if user is None:
        L.warning('Authentication error wrong credentials')
        return HttpResponseRedirect('/')
    else:
        auth_login(request, user)
        L.INFO('Authentication ok')
        return HttpResponseRedirect('/')

在这里,您可以使用django内置插件进行登录和注销,您的代码应该看起来像这样

答案 1 :(得分:0)

我不确定您是否以正确的方式执行此操作。 Django已经提供了一些机制来创建一些自定义用户模型。

您应该按照this part of the documentation中的描述,创建一个扩展django.contrib.auth.models.AbstractUser的模型。

您可以看到AbstractUser类已经具有所需的所有字段。

拥有此模型后,应在设置文件as mentioned here中将其注册为用户模型。

然后您可以使用Django实现的身份验证系统,就可以了。

如果AbstractUser提供的字段不是您要查找的字段,则可以退后一步。如果需要权限系统,则需要从django.contrib.auth.base_user.AbstractBaseUser中覆盖,也可能需要从django.contrib.auth.models.PermissionsMixin中覆盖。 只需使用tweaks and configuration,Django的内置视图和表单就可以与您的新模型一起使用。

管理初始用户模型有很多配置,一开始可能很难实现。但是,通过花一些时间了解所有这些类和配置键是如何协同工作的,您应该不会有任何问题。不要忘记查看auth系统的文档。它很繁重,但是只需一点点工作,您就可以在其中找到所需的一切。