在每个Web请求中都提供一个 request.user
属性来表示当前用户。如果当前用户未登录,则该属性为AnonymousUser的一个实例,反之,则是一个User实例。
你可以通过is_authenticated()来区分,例如:
if request.user.is_authenticated():
# Do something for authenticated users.
else:
# Do something for anonymous users.
登陆login **
**
login()
登陆函数,需要一个HttpRequest对象和一个User对象作参数。login()使用django的session框架,将User的id存储在session中。
同时使用authenticate()和login():
from django.contrib.auth import authenticate, login
def my_view(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
# Redirect to a success page.
else:
# Return a 'disabled account' error message
else:
# Return an 'invalid login' error message.
如果不知道密码,login方法:
user=MyUser.objects.get(...)
user.backend = 'django.contrib.auth.backends.ModelBackend'
login(request,user)
**退出登录logout
**
logout()
使用HttpRequest对象为参数,无返回值。例如:
from django.contrib.auth import logout
def logout_view(request):
logout(request)
# Redirect to a success page.
限制访问
The raw way
使用 request.user.is_authenticated()
再定向:
from django.shortcuts import redirect
def my_view(request):
if not request.user.is_authenticated():
return redirect('/login/?next=%s' % request.path)
# ...
或者:
from django.shortcuts import render
def my_view(request):
if not request.user.is_authenticated():
return render(request, 'myapp/login_error.html')
# ...
使用装饰器login_required
login_required([redirect_field_name=REDIRECT_FIELD_NAME, login_url=None]
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
...
如果用户未登录,则重定向到 settings.LOGIN_URL,并将现在的url相对路径构成一个next做key的查询字符对附加到
settings.LOGIN_URL后面去: