django中的auth详解

 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)

在视图层

 

 

 1  from django.shortcuts import render,HttpResponse
 2 
 3 
 4 
 5 # Create your views here.
 6 
 7 from django.contrib import  auth
 8 
 9 
10 
11 def login(request,*args,**kwargs):
12 
13 
14 
15     if request.method == "GET":
16 
17         return render(request,"login.html")
18 
19 
20 
21     if request.method == "POST":
22 
23         name = request.POST.get("name")
24 
25         pwd = request.POST.get("pwd")
26 
27 
28 
29         user = auth.authenticate(username=name,password=pwd)    认证密码和用户在数据库中
30                                                                 #username  password 不能写成其他
31 
32         if user:
33 
34             return HttpResponse("登录成功")
35 
36         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 所具有的方法,使用方式一样

 

转载于:https://www.cnblogs.com/reform999/p/10656577.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值