- 确认已经安装了session 框架。 需要确认用户使用cookie,这样sesson 框架才能正常使用。
- 将 'django.contrib.auth' 放在你的 INSTALLED_APPS 设置中,然后运行 manage.py syncdb以创建对应的数据库表。
- 确认 SessionMiddleware 后面的 MIDDLEWARE_CLASSES 设置中包含 'django.contrib.auth.middleware.AuthenticationMiddleware' SessionMiddleware。
在视图中存取users,主要用 request.user ;这个对象表示当前已登录的用户。如果用户还没登录,这就是一个AnonymousUser对象(细节见下)。
你可以很容易地通过 is_authenticated() 方法来判断一个用户是否已经登录了:
if request.user.is_authenticated(): # Do something for authenticated users. else: # Do something for anonymous users.
使用User对象
User 实例一般从 request.user ,或是其他下面即将要讨论到的方法取得,它有很多属性和方法。 AnonymousUser 对象模拟了 部分 的接口,但不是全部,在把它当成真正的user对象 使用前,你得检查一下 user.is_authenticated() 表14-3和14-4分别列出了`` User`` 对象中的属性(fields)和方法。
属性 | 描述 |
---|---|
username | 必需的,不能多于30个字符。 仅用字母数字式字符(字母、数字和下划线)。 |
first_name | 可选; 少于等于30字符。 |
last_name | 可选; 少于等于30字符。 |
可选。 邮件地址。 | |
password | 必需的。 密码的哈希值(Django不储存原始密码)。 See the Passwords section for more about this value. |
is_staff | 布尔值。 用户是否拥有网站的管理权限。 |
is_active | 布尔值. 设置该账户是否可以登录。把该标志位置为False而不是直接删除账户。 |
is_superuser | 布尔值 标识用户是否拥有所有权限,无需显式地权限分配定义。 |
last_login | 用户上次登录的时间日期。 它被默认设置为当前的日期/时间。 |
date_joined | 账号被创建的日期时间 当账号被创建时,它被默认设置为当前的日期/时间。 |
登录和退出
- Django 提供内置的视图(view)函数用于处理登录和退出 (以及其他奇技淫巧),但在开始前,我们来看看如何手工登录和退出。 Django提供两个函数来执行django.contrib.auth\中的动作 : authenticate()和login()
- 面的例子演示了如何在一个视图中同时使用
authenticate() 和 login() 函数
from django.contrib import auth def login_view(request): username = request.POST.get('username', '') password = request.POST.get('password', '') user = auth.authenticate(username=username, password=password) if user is not None and user.is_active: # Correct password, and the user is marked "active" auth.login(request, user) # Redirect to a success page. return HttpResponseRedirect("/account/loggedin/") else: # Show an error page return HttpResponseRedirect("/account/invalid/")
注销一个用户,在你的视图中使用 django.contrib.auth.logout() 。 它接受一个HttpRequest对象并且没有返回值。
from django.contrib import auth def logout_view(request): auth.logout(request) # Redirect to a success page. return HttpResponseRedirect("/account/loggedout/")
在实际中,你一般不需要自己写登录/登出的函数;认证系统提供了一系例视图用来处理登录和登出。 使用认证视图的第一步是把它们写在你的URLconf中。 你需要这样写:
from django.contrib.auth.views import login, logout urlpatterns = patterns('', # existing patterns here... (r'^accounts/login/$', login), (r'^accounts/logout/$', logout), )
/accounts/login/ 和 /accounts/logout/ 是Django提供的视图的默认URL。
-
-
限制已登录用户的访问
作为一个快捷方式, 你可以使用便捷的 login_required 修饰符:
from django.contrib.auth.decorators import login_required @login_required def my_view(request): # ...
login_required 做下面的事情:
-
如果用户没有登录, 重定向到 /accounts/login/ , 把当前绝对URL作为 next 在查询字符串中传递过去, 例如: /accounts/login/?next=/polls/3/ 。
-
如果用户已经登录, 正常地执行视图函数。 视图代码就可以假定用户已经登录了。
-