很抱歉,如果这很简单或者我的术语不正确,这是我的第一个django项目。我还没有为此在线找到类似的解决方案。
我有一个现有的应用程序,带有一个Postgres DB,可在其中验证我的用户身份。我已经在Django中编写了一个应用程序,可以与一些表进行交互并向用户显示信息。我想使用Django登录并跟踪该数据库的用户会话。所以我可以使用
之类的功能 {% if user.is_authenticated %}
但是我不想使用migration命令,所以我不想更改现有的数据库。创建模型时,我可以访问帐户信息所在的表。
我看到您可以使用远程用户登录参数,但是找不到任何示例或指南来使用它,并且完全迷失了。
现在,我在视图页面中创建一个登录表单。然后获取输入的用户名和密码,但我不知道下一步该怎么做。还需要对密码进行哈希处理。 djano中是否有一个用于该应用程序的库文件。
任何指针或在线指南,将不胜感激。
这是登录视图
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
email = form.data['account_email']
password = form.data['account_password']
user = authenticate(username=email)
if user.check_password(password):
login(request, user)
return redirect('myapp:cust_select')
else:
# Username and password did not match
raise ValidationError('Invalid Username/Password')
return render(request, 'myapp/login.html', {'form' : form}
backends.py
from django.conf import settings
from django.contrib.auth import get_user_model
class UserAuthBackend(object):
def authenticate(self, username=None, password=None):
try:
account = get_user_model()
user = account.objects.get(account_email=username)
if user:
return user
except account.DoesNotExist:
print "account not found"
return None
def get_user(self, user_id):
try:
account = get_user_model()
return account.objects.get(pk=user_id)
except User.DoesNotExist:
return None
models.py
class Accounts(AbstractUser):
account_id = models.AutoField(primary_key=True)
account_email = models.CharField(max_length=100)
account_password = models.CharField(max_length=20)
def __str__(self):
return self.account_email
class Meta:
managed = False
db_table = 'accounts'
settings.py
AUTHENTICATION_BACKENDS = ( 'myapp.backends.UserAuthBackend', )
它会不断退出,并在sql查询中出现相同的错误。 列account.password不存在 第1行:选择“帐户”。“密码”,“帐户”。“ last_login”,“帐户...
它似乎没有使用我的帐户模型。它确实从该表中选择了它,但是我该如何停止请求accounts.password
和accounts.last_login
,因为它们在y帐户模型中不存在
答案 0 :(得分:0)
对于reference 注意:您需要尝试一下才能使此代码正常工作
def login(request):
form = LoginForm()
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
username = form.data['account_email']
password = form.data['account_password']
# First authenticate
user = authenticate(request, username=username, password=password)
if user is not None :
# Succeed, now log user in
login(request,user)
return redirect('myapp:select')
else:
# Username and password did not match
raise ValidationError('Invalid Username/Password')
return render(request, 'myapp/login.html', {'form' : form})