Django中的login()函数是用来验证用户身份的,如果验证成功,函数会返回一个HttpResponseRedirect()对象,如果验证失败,函数会返回一个HttpResponse()对象。
login()函数定义如下:
from django.contrib.auth import authenticate, login
from django.contrib.auth.decorators import login_required
def my_view(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
# Redirect to a success page.
else:
# Return an 'invalid login' error message.
使用Django的login()函数,需要先通过authenticate()函数进行用户身份验证,如果验证成功,再调用login()函数登录用户。代码示例:
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
def my_view(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
error = 'Invalid username or password'
else:
error = ''
return render(request, 'login.html', {'error': error})
上面的代码中,用户提交的用户名和密码通过POST请求传递到my_view()视图函数中。视图函数首先通过authenticate()函数验证用户身份,验证成功后,调用login()函数将用户信息存储在session中。如果用户身份验证失败,视图函数会返回一个包含错误提示的页面。
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
def my_view(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
error = 'Invalid username or password'
else:
error = ''
return render(request, 'login.html', {'error': error})
上面这段代码是一个基本的用户登录视图函数。当用户提交用户名和密码后,如果验证成功,将会调用login()函数进行登录,并且跳转到首页。
from django.contrib.auth import authenticate, login
from django.http import HttpResponse
@login_required
def my_view(request):
# ...
return HttpResponse("You're logged in. Hello %s!" % request.user.username)
上面这段代码是一个需要用户登录才能访问的视图函数。@login_required装饰器会检查用户是否已经登录,如果没有登录,则会重定向到登录页面。如果用户已经登录,视图函数将返回一个包含用户欢迎信息的页面。
本文链接:http://task.lmcjl.com/news/16253.html