如何使用会话在 Django 中创建登录系统?

How do I create a Login System in Django Using Sessions?

我正在尝试创建一个通过自定义登录验证的网站。但是我有一个用户自定义模型。如何从匿名用户身份验证我的网站。是否可以使用基于会话创建登录系统。实际上这是我的第一个 django 项目。请指导我。谢谢。

登录时,在检查用户名和密码后创建一个会话,在其中设置他们的用户对象或其中的对象 ID。在这种情况下,我保留了用户 ID。

def login(request):
    if request.method == "GET":
        if (Users.objects.filter(username = request.GET.get("uname"), password = request.GET.get("upswd"))).exists():
            user = Users.objects.get(username = request.GET.get("uname"), password = request.GET.get("upswd"))
            request.session["user"] = user.id
            # request.session.set_expiry(10)
            # it shows home page
            return render(request,"home.html")
    #it shows again login page
    return render(request,"Login.html")

只有在登录页面你会设置会话,在剩下的你会检查页面是否包含该会话或not.For例如,在登录主页后你应该检查请求是否包含用户会话。

if request.session.has_key("user"):
    userid = request.session["user"]
    #displaying all items in database
    context={"items":Products.objects.all()}
    return render(request,"home.html",context)

与上述答案相比,最好使用 POST 表单而不是 GET 请求。此外,不要针对您的数据库查询用户名和密码,而是使用 authenticate() 函数。

from django.contrib.auth import authenticate, login

if request.POST:
    if login_form.is_valid():
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username=username, password=password)
        if user: 
            login(request, user)
        # do something or redirect

您无需在会话对象中设置用户 ID,要检索当前登录的用户,请使用 request.user