验证django 用户认证auth模块常见方法使用.
By:Roy.LiuLast updated:2014-02-19
在用 django 改造某些旧系统的时候,由于原来的用户设计不可能按照django 的 auth 模块的用户表那样设计的,当然你可以硬扩展成那样,但必须保证不影响别的系统,所以在很多情况下还是保持原来的表结构不变,自己写用户,权限管理这一块. 以前写过一篇自己定义 session 的方式: django 自定义session , 并采用装饰模式来实现django 自身的 @login_required 类似功能。 如果是新开发的应用,如何用django 自身的 装饰方法判断是否登录:
在这里直接用 @login_required 来装饰,但是用这种情况的前提是你必须采用 DJANGO的 autho 框架来实现用户管理.
除此之外,还有一些其他的方法:
logout(request[, next_page, template_name, redirect_field_name])
password_change(request[, template_name, post_change_redirect, password_change_form])
password_change_done(request[, template_name])
password_reset(request[, is_admin_site, template_name, email_template_name, password_reset_form,token_generator, post_reset_redirect, from_email])
password_reset_done(request[, template_name])
其用法可以参考如下:
rom django.shortcuts import render from programm.models import * from django.contrib.auth.decorators import login_required def index(request): return render(request, 'index.html') @login_required def liste(request): return render(request, 'liste.html', {'lObj': myModel.objects.all()})
在这里直接用 @login_required 来装饰,但是用这种情况的前提是你必须采用 DJANGO的 autho 框架来实现用户管理.
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.
除此之外,还有一些其他的方法:
logout(request[, next_page, template_name, redirect_field_name])
password_change(request[, template_name, post_change_redirect, password_change_form])
password_change_done(request[, template_name])
password_reset(request[, is_admin_site, template_name, email_template_name, password_reset_form,token_generator, post_reset_redirect, from_email])
password_reset_done(request[, template_name])
其用法可以参考如下:
(r'^change_passwd/$', 'django.contrib.auth.views.password_change', { 'template_name': 'change_passwd.html', 'post_change_redirect': '/', }), (r'^reset_passwd/$', 'django.contrib.auth.views.password_reset', { 'template_name': 'reset_passwd.html', 'email_template_name': 'reset_passwd_email.html', 'post_reset_redirect': '/reset_done/', 'from_email': 'noreply@jihua.in', }), (r'^reset_confirm/(?P[0-9A-Za-z]{1,13})-(?P [0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', \ 'django.contrib.auth.views.password_reset_confirm', { 'template_name': 'reset_confirm.html', 'post_reset_redirect': '/signin/', } ), (r'^reset_done/$', 'django.views.generic.simple.direct_to_template', {'template': 'message.html', 'extra_context': { 'msg': _(u'我们已将一封包含恢复密码步骤的邮件发到了您的邮箱,请查收'), }}),
From:一号门
COMMENTS