Auth模块是什么

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

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

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

1auth使用

1 在views导入auth模块

    from django.contrib import  auth

2 配置Mysql数据库,进行数据迁移

makemigration

migrate

3 创建超级用户

manage.py@author > createsuperuser

Username (leave blank to use 'administrator'):  lifujina

Email address:                                             邮箱不用填

Password:  88888888li

Password (again):  88888888li

Superuser created successfully.

2 auth模块常用方法

认证用户

auth.authenticate(username=name,password=pwd)

在视图层

  from django.shortcuts import render,HttpResponse

 # Create your views here.

 from django.contrib import  auth

 def login(request,*args,**kwargs):

     if request.method == "GET":

         return render(request,"login.html")

     if request.method == "POST":

         name = request.POST.get("name")

         pwd = request.POST.get("pwd")

         user = auth.authenticate(username=name,password=pwd)    认证密码和用户在数据库中
#username password 不能写成其他 if user: return HttpResponse("登录成功") return HttpResponse("登录失败")

前端

<body>
<form action="/login/" method="post">
    <input type="text" name = "name">
    <input type="password" name = "pwd">
    <input type="submit" value="登录">
</form>
</body>

 

 

auth.authenticate (username=name,password=pwd) 

认证用户名和密码是否存在

 

用户登录

 

auth.login(request, user)

 

user = auth.authenticate(username=name,password=pwd)
if user:
    auth.login(request,user=user)    注意是俩个参数,一个是request,一个是登录的用户
    #用户登录
    #user 是当前认证通过的user
    #会在生成一个随机字符串,并存在session中
    return HttpResponse("登录成功")
return HttpResponse("登录失败")

 

 

3   获得当前登录用户

request.user

 

def login(request,*args,**kwargs):

    if request.method == "GET":
        return render(request,"login.html")     if request.method == "POST":
        name = request.POST.get("name")
        pwd = request.POST.get("pwd")         user = auth.authenticate(username=name,password=pwd)
        if user:
            auth.login(request,user=user)
            #用户登录
            #user 是当前认证通过的user
            #会在生成一个随机字符串,并存在session中
            usr = request.user
            #当前登录用户,但是一个要在登录后才能拿到,
如果没有登录显示匿名用户
request.user = AnonymousUser
      #当前登录用户,不仅可以在后台能拿到,前台也能拿到
            print(usr)
            return HttpResponse("登录成功")
        return HttpResponse("登录失败")

 

 

用户退出登录

logout(request)

 

def logout(request):
    auth.logout(request)       一定注意有个request参数
相当于执行了:request.session.flush()
    return redirect("/login/")

 

 

登录认证装饰器(控制用户,没有登录不能访问某个连接)

@login_required(redirect_field_name="eee",login_url="/login/")

 导入 login_required模块
from  django.contrib.auth.decorators  import  login_required
 
局部认证:(直接加在被认证的函数上面)
@login_required(redirect_field_name="eee",login_url="/login/")
 
redirect_field_name="eee", 修改路径上?后的key值

 
login_url=”/login/”  在没有登录的情况下,访问test要跳转的页面
def test(request,*args,**kwargs):
    return render(request,"test.html")
 
 
全局认证:(在settings中配置)
 
LOGIN_URL = “/login/”只要没有登录的直接访问,跳到login页面
 
 
@login_required()                     这里的参数就不用再写了
def test(request,*args,**kwargs):
    return render(request,"test.html")
 

 

创建超级用户和普通用户

 

logout(request)

 

from django.contrib.auth.models import User       一定要导入 
def register(request,*args,**kwargs):
    name = 'egon'
    pwd = "123"     user = User.objects.create_user(username=name,password=pwd)   
username  password 不能写错
    sup_user = User.objects.create_superuser(username=name,password = pwd)     return HttpResponse("注册成功")

 

1 导入from django.contrib.auth.models  import User 下的 User

创建普通用户 超级用户

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

校验密码是否正确(check_password(password)

check_password(password)

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

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

用法:

ok = user.check_password('密码')

 

def check_password(request,*args,**kwargs):
    pwd = "123"#应该是前台将密码传过来     res = request.user.check_password(pwd)
          #注意是校验当前登录用户的密码(request.user为当前登录用户)
    if res:
     return HttpResponse("OK")
    return HttpResponse("密码错误")

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

修改密码

set_password(password)

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

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

 

def chang_password(request,*args,**kwargs):

    pwd = "123"
    user = request.user                       #获得当前登录用户
    user.set_password(pwd)           #当前登录用户,调用 set_password(pwd) 修改密码的 方   法                                           pwd 为新密码
    user.save()                                 # 一定要记得保存 save()     return HttpResponse("OK")

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9  判断当前用户有没有登录

 

is_authenticated()

 

def user_pass(request,*args,**kwargs):
    user = request.user.is_authenticated()  
#requset.user为当前登录用户,如果登录了,user值为True
没登录            user 为False
    print(user)
    return HttpResponse("OK")

 

10  其他方法

 

request.user.is_staff() :

用户是否拥有网站的管理权限. (设为false  不能登录admin)

request.user.is_active() :

是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录。(设为false,用户还存在,但是不能登录,封号)

 

 

 

 

 

 

2   auth_user 增加自定义字段

1 自定义一个类   继承AbstractUser

from django.contrib.auth.models import AbstractUser

class UserInfo(AbstractUser):
     #继承了 AbstractUser(auth  中的 User 其实就是继承了AbstractUser )拥有父类的所有字段
    phone = models.BigIntegerField(max_length=11,null=True)   #并派生了 我们自己的 的  字段     sex = models.BooleanField()
    #括号内 不能写null=True
    #这个字段是布尔类型    0 就代表false   1 代表ture

 

 

2 在settings  中配置 AUTH_USER_MODEL

 

AUTH_USER_MODEL = "appo.UserInfo"    #注意   是appo.UserInfo  而不是   appo.models.UserInfo

#是字典的形式   这句话 意思  就是  以后的 AUTH_USER  就  用 appo.UserInfo

 

3 在要使用 UserInfo 的地方 导入 UserInfo

# from django.contrib.auth.models import User
 
from appo.models import UserInfo
def register(request,*args,**kwargs):
    name = 'egon'
    pwd = "123"
    sex = 0     user = UserInfo.objects.create_user(username=name,password=pwd,sex=sex)
    # sup_user = User.objects.create_superuser(username=name,password = pwd)     return HttpResponse("注册成功")

 

注意: 这样数据库中就没有 auth_user这个表了,而是由userinfo取代了,以后凡是要用到User的地方 都用UserInfo 替代, auth 所具有的方法,使用方式一样

 

django中的auth详解的更多相关文章

  1. django中request对象详解(转载)

    django中的request对象详解 Request 我们知道当URLconf文件匹配到用户输入的路径后,会调用对应的view函数,并将  HttpRequest对象  作为第一个参数传入该函数. ...

  2. django中models field详解

    本文参考自:django官方文档models/field 在model中添加字段的格式一般为:  field_name = field_type(**field_options) 一  field o ...

  3. django中的模型详解-1

    在说明django模型之前,首先来说明一下django的生命周期,也就是一个请求到达django是如何处理的.[暂时不包含中间件] 浏览器的请求---->到达django中的urls中找到对应的 ...

  4. Django中的Ajax详解

    AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当 ...

  5. django中的filter详解

    filter (数据过滤) 我们很少会一次性从数据库中取出所有的数据:通常都只针对一部分数据进行操作. 在Django API中,我们可以使用`` filter()`` 方法对数据进行过滤: > ...

  6. Django中model层详解

    #!/usr/bin/env python# _*_ coding:utf-8 _*_ from django.db import models class UserType(models.Model ...

  7. Django框架 之 querySet详解

    Django框架 之 querySet详解 浏览目录 可切片 可迭代 惰性查询 缓存机制 exists()与iterator()方法 QuerySet 可切片 使用Python 的切片语法来限制查询集 ...

  8. php中关于引用(&)详解

    php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...

  9. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

随机推荐

  1. Docker-容器数据卷

    docker容器数据卷相当于外置的移动硬盘 docker容器数据卷主要功能是:容器的持久化.容器间继承+共享数据 特点: (1)数据卷可以容器之间共享或重用数据 (2)卷中更改可以直接生效 (3)数据 ...

  2. linux下pgAdmin4安装

    首先到pgAdmin4官方网站下载安装包:https://www.pgadmin.org/download/ 我下载的是3.0; 到文件所在目录执行安装命令: sudo pip install ./p ...

  3. codeforces 497E Subsequences Return

    codeforces 497E Subsequences Return 想法 做完这题,学了一些东西. 1.求一个串不同子序列个数的两种方法.解一 解二 2.这道题 \(n\) 很大,很容易想到矩阵加 ...

  4. Java 多态(接口)

    有两种意义的多态,一是操作名称的多态,即有多个操作具有相同的名字,但这些操作所接收的消息类型必须不同(方法重载).另一种多态是和继承有关的多态,是指同一个操作被不同类型对象调用时可能产生不同的行为(方 ...

  5. JavaScript 变量声明提升

    JavaScript 变量声明提升 一.变量提升的部分只是变量的声明,赋值语句和可执行的代码逻辑还保持在原地不动 二.在基本的语句(或者说代码块)中(比如:if语句.for语句.while语句.swi ...

  6. java内部类之成员内部类

    内部类概念:顾名思义,就是将一个类定义在另一个个类内部.内部的类称之为内部类 . 内部类的主要特点:1.内部类可以很好的实现隐藏,可以使用protected.private修饰符.2.内部类可以直接访 ...

  7. Linux磁盘管理.md

    df df 即“可用磁盘”disk free,用于显示文件系统的磁盘使用情况.默认情况下 df 命令将以每块 1K 的单位进行显示所有当前已挂载的文件系统,如果你想以人类易读的格式显示 df 命令的输 ...

  8. Kali-linux分析密码

    在实现密码破解之前,介绍一下如何分析密码.分析密码的目的是,通过从目标系统.组织中收集信息来获得一个较小的密码字典.本节将介绍使用Ettercap工具或MSFCONSOLE来分析密码. 8.2.1 E ...

  9. 获取某商家当前每个月销量sql语句。

    用两个mysql函数 FROM_UNIXTIME( ordertime )将日期格式转换成时间戳 month( FROM_UNIXTIME( ordertime ) ) 获取当前日期的月 select ...

  10. web前端开发从0到1—html结构与常用标签

    一:html文档标签结构 <html></html><!--文档片头信息,表示文档内容是用什么标签写的.--> <head></head>& ...