zoukankan      html  css  js  c++  java
  • 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指向该路径,自动跳转访问的页面

     

  • 相关阅读:
    设计数据库步骤
    sql练习题
    多表连接查询
    数据约束
    管理并行SQL执行的进程
    关于Oracle数据库后台进程
    配置数据库驻留连接池
    为共享服务器配置Oracle数据库
    关于数据库驻留连接池
    关于专用和共享服务器进程
  • 原文地址:https://www.cnblogs.com/open-yang/p/11223209.html
Copyright © 2011-2022 走看看