Django之auth认证系统

auth模块简介 

在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能。 

  Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据,使用auth模块来进行用户认证,那么需要使用人家django自带的auth_user表来存储用户的信息数据。

 

auth模块使用

在初始化创建数据库时,会自动生一个auth_user的表,就是用来做认证使用的,当然也可以自定义这个认证表的名称和字段内容

djangoauth认证的流程:

1.    视图中导入认证模块和用户表:

from django.contrib  import  auth

from django.contrib.auth.models import User

2.    注册创建新用户:

models.User.objects.create_user(username='',password='')

models.User.objects.create_superuser(username='',password='')

3.    登陆校验,记录状态:

user_obj=auth.authenticate(username='',password='');

auth.login(request,user_obj)自动执行session操作,同时更新request请求对象的user属性为当前用户

4.    访问认证

request.user.is_authenticated判断当前状态Ture/False

5.    退出登录

auth.logout(request)自定执行request.session.flush()方法

6.    修改密码

request.user.check_password(old_password)检验密码是否正确

request.user.set_password(new_password) 设置新密码

request.user.save()提交保存密码

 

auth_use表自定义

1.    models.py文件中重新定义一个类如Userinfo,必须继承AbstractUser类(fromdjango.contrib.auth.modelsimportAbstractUser

2.    seetings.py中配置:AUTH_USER_MODEL='app01.Userinfo'#自定义认证表:应用名.类名

3.    在视图中引入时:fromapp01importmodelsfrom django.contrib  import  auth

4.    注册时使用:models.Userinfo.objects.create_user()

5.    其它操作均一样

 

访问认证装饰器方法:

from django.contrib.auth.decorators import login_required

@login_required

def index(request):

    # if request.user.is_authenticated:

        print(request.user)

        if request.method == 'GET':

            return render(request, 'index.html')

    # else:

    #     return redirect('login')

若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/

如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。 

LOGIN_URL = '/login/'  # 这里配置成你项目登录页面的路由

 

#状态认证的首页访问(使用装饰器认证状态失败,会自动跳转一个路径,可以在settings中配置指定LOGIN_URL='/login/')

#同时在页面的请求路径会自动加上'?next=/index/'(当前页面路径)

#借此可以在前端通过location.search获取后slice切边获取路径,登录成功之后在success回调函数location.href指向该路径,自动跳转访问的页面

 

posted @ 2019-07-21 22:46  笑得好美  阅读(577)  评论(0编辑  收藏  举报