2.4.2、Django处理登录和注销
在上一节的基础上,我们已经引入了django.contrib.auth应用,我们就可以在view函数中判断用户是否已经登录以及获取用户信息:
if request.user.is_authenticated(): #判断用户是否已登录
user = request.user; #获取已登录的用户
else:
user = request.user; #非登录用户将返回AnonymousUser对象
Django的User对象提供了一系列的属性和方法,其中password存储的是加密后的密码,is_staff记录用户是否有管理员权限,其他的属性可以参考官方文档。同时django.contrib.auth模块中提供了authenticate()、login()、logout()等函数,分别实现认证、登录、登出等功能。
Django还为我们提供了内置的处理login、logout的view函数,也可以按需要自己实现view函数。
下面就开始修改Urls.py,views.py,base.html吧
Urls.py中的配置:
from myoss.views import login_view,logout_view
urlpatterns = patterns('',
... ...
(r'^accounts/login/$', login_view),
(r'^accounts/logout/$', logout_view),
)
Views.py中的login_view和logout_view函数定义:
from django.contrib.auth import authenticate,login,logout
def login_view(request):
user=authenticate(username=request.POST['username'], password=request.POST['password'])
if user is not None:
login(request, user)
print request.user
return list_product(request)
else:
#验证失败,暂时不做处理
return store_view(request)
def logout_view(request):
logout(request)
return store_view(request)
ü base.html中实现的简单登录表单
{% if request.user.is_authenticated %}
<div class="pull-right">
<a href=#>欢迎您:{{request.user}}</a>
<a class="btn danger small" href="{% url depotapp.views.logout_view %}">注销</a>
</div>
{% else %}
<form action="{% url depotapp.views.login_view %}" method='post' class="pull-right">
{% csrf_token %}
<input name='username' class="input-small" type="text" placeholder="用户名">
<input name='password' class="input-small" type="password" placeholder="密码">
<button class="btn" type="submit">登录</button>
</form>
{% endif %}
上面的东西简单看看就好,看下django自带模板对变量,逻辑处理的方式就可以了。