我正在做一个编程证书(Python编程)的最终项目。我的观点遇到了一个问题。我的MySQL数据库连接到django,并且我已经创建了一个帐户(通过MySQL),但是当我尝试使用这些帐户凭据登录时,它会发送这些凭据无效或不存在的错误。当我在代码中添加一个print函数时,它会将用户打印为“None”。然而,如果我在username和password中添加print,它会打印出输入的凭证。感谢你的评分
from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import Discount, Store
from django.contrib.auth import authenticate, login as auth_login
from django.contrib.auth.decorators import login_required
from .forms import DiscountForm
from django.contrib.auth.models import User
# Create your views here.
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username')
print(username)
password = request.POST.get('password')
print(password)
user = authenticate(request, username=username, password=password)
print(user)
if user is not None:
auth_login(request, user) # Use auth_login instead of login
return redirect('discountList')
else:
return render(request, 'index.html', {'error': 'Invalid credentials'})
return render(request, 'index.html')
2条答案
按热度按时间snz8szmq1#
Django * hash * 密码,所以在数据库中手动创建一个原始文本将 * 不 * 工作。
但是你不需要创建一些视图来修改密码,你可以使用命令行来修改密码,命令行中有**
changepassword
**命令[Django-doc]:然后,这将适当地散列给定密码并将其存储在数据库中。
注意:最好使用
Form
[Django-doc],而不是手动进行数据校验和清洗。Form
不仅可以简化HTML中表单的渲染,还可以更方便地验证输入,并将数据清理为更方便的类型。abithluo2#
有一个类名“LoginView”,它是一个基于类的视图来处理登录过程。使用方法:
login.html应该是这样的:
这比基于函数的视图更简单。你可以阅读更多关于它:Classy class based views
如果仍然有问题,可能需要删除迁移,然后重新执行。希望这能帮上忙。
有一天我发现了你创建的bugviews.py
纠正这些行,您的代码将正常工作。
请参阅此“https://stackoverflow.com/questions/74495020/how-to-use-a-django-python-login-form“