美文网首页
auth模块基础方法

auth模块基础方法

作者: warmsirius | 来源:发表于2019-07-30 22:31 被阅读0次

    写在前面

    这几天的项目用到了挺多auth模块的内容,今天来总结一下django中auth模块的一些基础的用法。

    参考博客

    auth模块的基础方法

    • 导入模块
    from django.contrib import auth
    
    • 1、命令行创建超级用户或创建用户
    python manage.py createsuperuser
    python manage.py createuser
    
    • 2、authenticate() 认证功能
      • 验证用户名和密码(Django2也会验证is_active,可以添加配置只验证用户名和密码)
    # 让authenticate不关联is_active
    AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.AllowAllUsersModelBackend']
    
    • 如果验证成功,得到的是一个用户对象
    • 如果验证失败,得到的是None(任何属性都是空)
    user = auth.authenticate(username=username, password=pwd)
    
    • 3、login(HttpRequest, user)
      • 该函数接受一个HttpRequest对象,以及一个经过认证的User对象。
      • 该函数实现一个用户登录的功能。
      • 它本质上会在后端为该用户生成相关session数据。
    
    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:
            login(request, user)
            # Redirect to a success page.
            ...
        else:
        # Return an 'invalid login' error message.
            ...
    
    • 4、logout(request)
      • 该函数接受一个HttpRequest对象,无返回值。
      • 当调用该函数时,当前请求的session信息会全部清除。
      • 注意: 该用户即使没有登录,使用该函数也不会报错。
    from django.contrib.auth import logout
    
    def logout_view(request):
        logout(request)
        # Redirect to a success page.
    
    
    • 5、is_authenticated()
      • 用来判断当前用户是否通过了认证
      def my_view(request):
        if not request.user.is_authenticated():
        return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
    
    • 6、login_requierd()

      • auth 给我们提供的一个装饰器工具,用来快捷的给某个FBV视图添加登录校验
      • 也可以给CBV视图添加登录校验

      注意:

      • 若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。
      • 如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。 LOGIN_URL = '/login/' # 这里配置成你项目登录页面的路由
    from django.contrib.auth.decorators import login_required
    
    @login_required
    def my_view(request):
        ...
    
    from django.contrib.auth.decorators import login_required
    from django.utils.decorators import method_decorator
    
    class Home(views.View):
    
        @method_decorator(login_required)
        def get(self, request):
            return render(request, 'home.html')
    
    • 7、create_user()
      • auth 提供的一个创建新用户的方法,针对auth中的User数据模型,或者是需要提供必要参数(username、password)等。
      • 注意: 在使用create_user()的时候,auth模块会默认将收到的明文密码加密存储进数据库。
    from django.contrib.auth.models import User
    
    user = User.objects.create_user(username = '用户名', password = '密码', email = '邮箱', ...)
    # create_superuser() # 创建超级用户
    
    
    • 8、check_password(input_password, user.password)

      • auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。密码正确返回True,否则返回False。
      • 该方法会自动将收取到的明文密码加密,不需要其他设置。
    from django.contrib.auth.hashers import check_password
    user = User.objects.get(username=username)
    pwd = user.password
    
    print(user)
    
    # 第一个参数为明文密码,第二个参数为加密后的密
    if check_password(password, pwd):
        # 用户名密码正确
        pass
    
    • 9、set_password(password)
      • auth 提供的一个修改密码的方法,针对某个用户对象的方法,接收 要设置的新密码 作为参数。
      • 注意: 设置完一定要调用用户对象的save方法
    user.set_password(password='')  
    user.save()
    

    相关文章

      网友评论

          本文标题:auth模块基础方法

          本文链接:https://www.haomeiwen.com/subject/zuzorctx.html