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. OS考研复习笔记——操作系统的定义、目标、作用和发展的主要动力

    计算机系统由硬件和软件两部分组成.操作系统(OS,Operating System)是配置在计算机硬件上的第一层软件,是对硬件系统的首次补充. 硬件:计算机物理设备,即各种处理机存储器.输入/输出设备 ...

  2. @Autowired和@Resource注解的区别

    @Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false.如果我们想使用按名称装配,可以结合@Qualifier注 ...

  3. 沉淀再出发:redis的安装和使用

    沉淀再出发:redis的安装和使用 一.前言 下面让我们看看Redis这个键值对内存数据库的使用方法和相关注意事项. 二.Redis的安装和使用 2.1.Redis的定义 REmote DIction ...

  4. 微服务、rest/restful、springmvc、http简要梳理

    微服务简介 微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务.一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序.简而言之,微服务架构是 ...

  5. iOS--性能优化--保持界面流畅

    卡顿产生的原因和解决方案 在 VSync 信号到来后,系统图形服务会通过 CADisplayLink 等机制通知 App,App 主线程开始在 CPU 中计算显示内容,比如视图的创建.布局计算.图片解 ...

  6. js oc与线程

    分属不同的线程 //定义需要暴露给js的内容,这里我们只暴露personName和queryPersonName接口 @protocol PersonProtocol <JSExport> ...

  7. [19/05/02-星期四] GOF23_行为型模式(状态模式、观察者模式、备忘录模式)

    一.状态模式 [状态接口] /*** * 房间"状态"接口 */ package cn.sxt.state; public interface State { void handl ...

  8. PHP面试系列 之Linux(五)---- 案例

    题:如何实现每天0点重新启动服务器? 答: (1)创建定时任务,并进行编辑 crontab -e (2)编写脚本内容 * * * reboot 0分  0时  每日  每月  每周 执行的命令:reb ...

  9. HDU 3635 Dragon Balls(超级经典的带权并查集!!!新手入门)

    Dragon Balls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  10. #ifdef 和 #if defined的区别

    #ifdef 和 #if defined的区别在于,后者可以组成复杂的预编译条件,比如 #if defined (AAA) && defined (BBB)xxxxxxxxx#endi ...