我的django视图/登录表单无法正常工作

disbfnqx  于 2023-06-25  发布在  Go
关注(0)|答案(2)|浏览(174)

我正在做一个编程证书(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')
snz8szmq

snz8szmq1#

Django * hash * 密码,所以在数据库中手动创建一个原始文本将 * 不 * 工作。
但是你不需要创建一些视图来修改密码,你可以使用命令行来修改密码,命令行中有**changepassword**命令[Django-doc]:

python3 manage.py changepassword username

然后,这将适当地散列给定密码并将其存储在数据库中。

注意:最好使用Form [Django-doc],而不是手动进行数据校验和清洗。Form不仅可以简化HTML中表单的渲染,还可以更方便地验证输入,并将数据清理为更方便的类型。

abithluo

abithluo2#

有一个类名“LoginView”,它是一个基于类的视图来处理登录过程。使用方法:

from django.contrib.auth.views import LoginView

class MyLoginForm(LoginView):
    template_name="login.html"
    success_url = reverse_lazy("any url you choose")

login.html应该是这样的:

<html>
<body>
   <h1>
      Login Form
   </h1>
   <form method="POST">
       {{form.as_p}}
       {% csrf_token %}
       <input value="submit" type="submit"/>
   </form>
</body>
</html>

这比基于函数的视图更简单。你可以阅读更多关于它:Classy class based views
如果仍然有问题,可能需要删除迁移,然后重新执行。希望这能帮上忙。
有一天我发现了你创建的bugviews.py

user = request.POST["username"]
password = request.POST["password"]

纠正这些行,您的代码将正常工作。
请参阅此“https://stackoverflow.com/questions/74495020/how-to-use-a-django-python-login-form“

相关问题