zoukankan      html  css  js  c++  java
  • Auth模块

    一:Auth模块简介

    二:Auth模块常用方法

    三:扩展默认的auth_user表

    一:Auth模块简介

    Auth模块是Django自带的用户认证模块:

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

    Django内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。

    链接数据库后有自带的auth_user

    二:Auth模块常用方法

    from django.contrib import auth
    from django.contrib.auth.decorators import login_required
    def auth_test(request):
        if request.method=='POST':
            name=request.POST.get('name')
            pwd=request.POST.get('pwd')
            #做认证
            user=auth.authenticate(request,username=name,password=pwd)
            # user=models.User.objece.filter(username=name,password=pwd).first()
            if user:
                # 做登录
                auth.login(request,user)
                return HttpResponse('登录成功')
            else:
                return HttpResponse('登录失败')
    
        return render(request,'index.html')
    
    
    def auth_test2(request):
        # print(request.user.username)
        # print(request.user.password)
        # print(type(request.user))
        print(request.user)
    
    
        return render(request,'auth_test.html')
    
    def auth_logout(request):
        auth.logout(request)
        return HttpResponse('注销成功')
    @login_required
    def auth_createuser(request):
        # UserInfo.objects.create()
        # user1=UserInfo.objects.create_superuser(username='lqz1',password='lqz12345',email='88@qq.com')
        # user2=UserInfo.objects.create_user(username='lqz2',password='lqz12345',email='88@qq.com')
        # user = auth.authenticate(request, username='lqz1', password='lqz12345')
        # if user:
        #     print('1111')
        # else:
        #     print('222')
        if request.user.is_authenticated():
            print('登录了',request.user)
        else:
            print('没有登录',request.user)
    
        # user=request.user
        # 校验密码
        # ret=user.check_password('lqz12345')
        # print(ret)
        # 设置密码
        # print(user)
        # !!!!!!一定要save
        # user.set_password('lqz11111')
        # user.save()
    
        return HttpResponse('注册成功')
    views.py
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {%  if request.user.is_authenticated %}
    
    {% endif %}
    </body>
    </html>
    auth_test.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <script src="/static/jquery-3.3.1.js"></script>
        <title>Title</title>
    </head>
    <body>
    <form action="" method="post">
        {% csrf_token %}
    
        <p>用户名:<input type="text" name="name" id="name"></p>
        <p>密码:<input type="password" name="pwd"></p>
        <input type="submit">
    </form>
    <button id="ajax">ajax</button>
    
    </body>
    <script>
        $("#ajax").click(function () {
            $.ajax({
            url:'',
            type:'post',
            //data:{'name':$("#name").val(),'csrfmiddlewaretoken':$('[name="csrfmiddlewaretoken"]').val()},
            data:{'name':$("#name").val(),'csrfmiddlewaretoken':'{{ csrf_token }}'},
            success:function (data) {
                console.log(data)
    
            }
    
        })
        })
    
    </script>
    
    </html>
    index.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <script src="/static/jquery-3.3.1.js"></script>
        <title>Title</title>
    </head>
    <body>
    <form action="" method="post">
    
    {#    {% csrf_token %}#}
        <p>用户名:<input type="text" name="name" id="name"></p>
        <input type="submit">
    </form>
    <button id="ajax">ajax</button>
    
    </body>
    <script>
        $("#ajax").click(function () {
            $.ajax({
            url:'',
            type:'post',
            //data:{'name':$("#name").val(),'csrfmiddlewaretoken':$('[name="csrfmiddlewaretoken"]').val()},
            data:{'name':$("#name").val(),'csrfmiddlewaretoken':'{{ csrf_token }}'},
            success:function (data) {
                console.log(data)
    
            }
    
        })
        })
    
    </script>
    
    </html>
    index1.html
    from django.contrib import auth

    authenticate()

    提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。

    如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。

    authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。

    用法:

    user = authenticate(username='usernamer',password='password')

    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.
        ...
    复制代码

    logout(request) 

    该函数接受一个HttpRequest对象,无返回值。

    当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。

    用法:

    from django.contrib.auth import logout
       
    def logout_view(request):
      logout(request)
      # Redirect to a success page.

    is_authenticated()

    用来判断当前请求是否通过了认证。

    用法:

    def my_view(request):
      if not request.user.is_authenticated():
        return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

    login_requierd()

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

    用法:

    from django.contrib.auth.decorators import login_required
          
    @login_required
    def my_view(request):
      ...

    若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。

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

    示例:

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

    create_user()

    auth 提供的一个创建新用户的方法,需要提供必要参数(username、password)等。

    用法:

    from django.contrib.auth.models import User
    user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)

    create_superuser()

    auth 提供的一个创建新的超级用户的方法,需要提供必要参数(username、password)等。

    用法:

    from django.contrib.auth.models import User
    user = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)

    check_password(password)

    auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。

    密码正确返回True,否则返回False。

    用法:

    ok = user.check_password('密码')

    set_password(password)

    auth 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。

    注意:设置完一定要调用用户对象的save方法!!!

    用法:

    user.set_password(password='')
    user.save()
     一个修改密码的简单示例

    User对象的属性

    User对象属性:username, password

    is_staff : 用户是否拥有网站的管理权限.

    is_active : 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录。

    三:扩展默认的auth_user表

    1 model中设置

    from django.db import models
    
    # Create your models here.
    from django.contrib.auth.models import AbstractUser
    
    class UserInfo(AbstractUser):
        nid=models.CharField(max_length=32)
        phone=models.CharField(max_length=32)
        addr=models.CharField(max_length=32)
    models.py
    2 settings中设置,
    AUTH_USER_MODEL = "app01.UserInfo"

    ps:一旦我们指定了新的认证系统所使用的表,我们就需要重新在数据库中创建该表,而不能继续使用原来默认的auth_user表了。


  • 相关阅读:
    ASP程序调用验证码
    fcex pf.conf
    高速INTERNET代理服务器解决方案
    《IIS 6的几个经典问答》
    一个符合WEB标准的横向下拉菜单
    FREEBSD+PF 在6.2上的架设
    权限
    FreeBSD+IPFILTER实现整网(N个Vlan)透明代理上网
    pf 带宽控制 例子
    FreeBSD下配置DHCP服务小结
  • 原文地址:https://www.cnblogs.com/xujinjin18/p/9665091.html
Copyright © 2011-2022 走看看