我从django User
类中进行了分类,以创建我自己的个性化版本。我可以讨论的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 %}
那么,我如何验证从django用户类继承的User
类?
答案 0 :(得分:0)
确保您的模型位于已安装的应用列表中的应用中,Auth_USER_MODEL设置为@alecxe,并且您运行了sync db。
如果您在设置新用户模型之前运行了同步数据库,则需要核对数据库并在模型到位后再次运行它。这可以解释为什么一切似乎都在起作用,但事实并非如此......来自docs:
更改AUTH_USER_MODEL会对数据库结构产生很大影响。它更改了可用的表,它将影响外键和多对多关系的构造。如果您打算设置AUTH_USER_MODEL,则应在创建任何迁移或首次运行manage.py migrate之前设置它。
makemigrations不支持在创建表后更改此设置,这将导致您必须手动编写一组迁移来修复架构。