使用post请求登录/检查Django网站数据库中的用户名和密码

使用post请求登录/检查Django网站数据库中的用户名和密码,django,python-3.x,django-models,django-views,django-authentication,Django,Python 3.x,Django Models,Django Views,Django Authentication,我已经创建了一个博客网站,在这里我想登录一个用户,其用户名和密码保存在一个名为“myuser”的数据库表中。我已经在我的函数中从post请求中获取了用户名和密码 现在,如何从已创建的表值中比较此值以检查用户名和密码是否正确?您可以通过从模型类导入模型来检查用户 from django.contrib.auth.models import User bool_answer = User.objects.filter(yourtablefield="yourusername").exists()

我已经创建了一个博客网站,在这里我想登录一个用户,其用户名和密码保存在一个名为“myuser”的数据库表中。我已经在我的函数中从post请求中获取了用户名和密码


现在,如何从已创建的表值中比较此值以检查用户名和密码是否正确?

您可以通过从模型类导入模型来检查用户

from django.contrib.auth.models import User
bool_answer = User.objects.filter(yourtablefield="yourusername").exists()
若bool_的答案为真,那个么这意味着用户存在其他方面的错误

  • 您需要检查用户是否存在于“myusertable”中,如果存在,则检查密码是否匹配

  • 如果活动、存在且密码匹配,请使用django sessions framework[最方便]或django cache/cookie framework登录用户并存储用户登录的会话

  • 在模板中 注意:确保“django.core.context_processors.request”位于settings.py中的上下文处理器中

    {% if request.session.isLoggedIn %}
        {{request.session.username}}
    
    {% else if not request.session.isLoggedIn %}
        <p>User not in session or logged off</p>
    {% endif %
    
    
    {%if request.session.isLoggedIn%}
    {{request.session.username}
    {%else如果不是request.session.isLoggedIn%}
    用户未在会话中或已注销

    {%endif%
    您无法手动检查密码。因为在创建用户时,django将用户密码作为哈希值存储在数据库中。现在,如果您将原始密码存储在自定义表中,即
    myuser
    ,这不是一个好的做法

    因为如果有人访问了你的数据库,他也可以看到这些表。他会发现什么?所有用户宝贵的、美味的密码

    如果您存储的是原始密码,即
    mypassword12345
    ,他刚刚得到了实际密码。如果您使用默认的django方法,django将如下存储密码:
    jkashdu12321kandsxn!312nasdkhj
    ,例如,这是您的
    mypassword12345
    的哈希值。现在攻击者将看到密码为ode>jkashdu12321kandsxn!312nasdkhj这是您密码的哈希值。Django使用一些强哈希算法,因此攻击者无法轻易破解您的密码

    因此,即使他能访问你的数据库,除了删除文档,他也无能为力。(这很严重,但你会存储备份,对吗?)

    因此,如果您是原始存储密码,请不要。这是为了您的应用程序安全

    现在,当您刚刚在函数中获得用户提供的
    用户名
    密码
    ,并且您想要检查用户是否存在时,您可以按照@MalikFaiq的建议进行操作,即:

    from django.contrib.auth.models import User
    check_if_user_exists = User.objects.filter(yourtablefield="yourusername").exists()
    
    现在,如果
    检查\u user\u是否存在
    为true,则表示您的表中有一个使用此用户名的用户。如果为false,则表示没有用户

    现在,您需要检查此用户是否为您提供了正确的密码。您可以通过执行以下操作进行检查:

        if check_if_user_exists:
            user = authenticate(request, username=username, password=password)
    
            if user is not None:
                # this user is valid, do what you want to do
            else:
                # this user is not valid, he provided wrong password, show some error message
        else:
            # there is no such entry with this username in the table
    
    

    希望有帮助。

    你不应该自己储存用户名/密码

    from django.http import HttpResponseForbidden
    from django.contrib.auth import authenticate
    
    # Authenticate
    user = authenticate(username=username, password=password)
    if user is None:
        return HttpResponseForbidden()
    else:
        # Ready for operation
        ...
    

    也许可以帮助你。请使用Django的身份验证-如果你自己编写,那么它可能是不安全的。例如,你可能没有像你应该的那样在
    myuser
    表中对密码进行加密和散列。是的,我不会使用密码进行加密,但这不是问题,我正在学习Django,并想将这些细节与m进行比较y表不是现有的表我想比较用户名和密码如何做,以及如何指定哪个表用于身份验证您无法匹配密码,因为django对密码应用加密。django在auth模块的用户模型中存储用户详细信息。实际上,我使用自己的表存储用户信息,我认为您可以I don’我不理解我的查询,喜欢这个评论。它帮助我快速向网站添加功能。对于任何想知道..
    来自django.contrib.auth import的人,请验证
    对于想知道下一步是什么的人:
    如果用户:登录(请求,用户=用户);返回HttpResponse('Logged in!',状态=200)
    在此之后,
    @login\u enabled
    将起作用。
    from django.http import HttpResponseForbidden
    from django.contrib.auth import authenticate
    
    # Authenticate
    user = authenticate(username=username, password=password)
    if user is None:
        return HttpResponseForbidden()
    else:
        # Ready for operation
        ...