1

我从 djangoUser类中继承,以创建我自己的个性化版本。User我可以谈论的课程是django.contrib.auth.models.User

这是它的样子:

from django.db import models
from django.contrib.auth.models import User as Auth_User


class User(Auth_User):

    # User data
    Age = models.IntegerField(blank=False, default=0)
    middle_name = models.CharField(blank=True, max_length=255)

    # Properties
    @property
    def full_name(self):

        return str(self.first_name + ' ' + (self.middle_name + ' ' if self.middle_name else '') + self.last_name)

    # Overridden functions
    def __unicode__(self):

        return self.full_name

请不要说这是模型的简化版本,有更多数据,与这个问题无关。

现在,当我尝试通过传统方式进行身份验证时,它失败了:

def login(request):

    if request.method == 'GET':
        return render(request, "User/login.html")

    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']

        new_user = authenticate(username=username, password=password)

        if new_user is not None:
            if new_user.is_active:
                login(request, new_user)
        else:
            print "User is not alive, he/she died! :("

        return HttpResponseRedirect('/users/')

HTML 没什么特别的:

{% extends 'layout.html' %}

{% block content %}
    <form action="/users/login" method="post">
        {% csrf_token %}
        <label for="username">
            Username:
            <input type="text" name="username" id="username"/>
        </label>
        <label for="password">
            Password:
            <input type="password" name="password" id="password"/>
        </label>
        <input type="submit" value="Submit"/>
    </form>
{% endblock %}

那么,如何验证User从 django 用户类继承的我的类?

4

1 回答 1

0

确保您的模型位于已安装应用程序列表中的应用程序中,Auth_USER_MODEL 设置为提到的@alecxe,并且您运行了同步数据库。

如果您在设置新用户模型之前运行了同步数据库,那么您需要核对数据库并再次运行它,因为您的模型已经到位。这可以解释为什么一切似乎都在工作,但事实并非如此......来自文档

更改 AUTH_USER_MODEL 对您的数据库结构有很大影响。它改变了可用的表,它会影响外键和多对多关系的构建。如果您打算设置 AUTH_USER_MODEL,则应在创建任何迁移或第一次运行 manage.py migrate 之前设置它。

makemigrations 不支持在创建表后更改此设置,这将导致您必须手动编写一组迁移来修复您的架构。

于 2013-09-08T03:21:12.100 回答