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

时间:2018-08-03 09:01:24

标签: django session login django-authentication

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

2 个答案:

答案 0 :(得分:0)

登录时,检查用户名和密码后,创建一个会话,在其中设置其用户对象或对象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")

仅在登录页面上设置会话,其余的将检查页面是否包含该会话。例如,在登录首页后,您应检查请求是否包含用户会话。

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)

答案 1 :(得分:0)

相对于上述答案,最好使用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