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