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表了。


 

posted @ 2018-09-17 21:39  xujinjin  阅读(221)  评论(0编辑  收藏  举报