码迷,mamicode.com
首页 > 其他好文 > 详细

[Django高级之Auth模块]

时间:2021-06-02 20:54:07      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:oct   char   utf-8   href   trap   token   link   djang   改密码   

[Django高级之Auth模块]

auth模块 ←详情点击查看

1、Auth模块是什么

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

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

Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统–auth,它默认使用 auth_user 表来存储用户数据。

1 django提供的用户认证,创建,修改密码。。。用户相关操作
2 不需要创建用户表了,默认带了
3 插入数据(创建用户):
    python3 manage.py createsuperuser   # 创建超级用户  通常只有一到两个超级用户

2、auth模块常用方法

from django.contrib import auth   # 导入auth模块

urls.py

from app01 import views


urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^login/‘,views.MyLogin.as_view()),  # 登录界面
    url(r‘^aa/‘,views.aa,name=‘aa‘),  
    url(r‘^set_password/‘,views.set_password,)  # 修改密码
]

views.py

from django.contrib import auth   # 导入auth模块

def login(request):
    
    if request.method == ‘POST‘:
        username = request.POST.get(‘username‘)
        password = request.POST.get(‘password‘)
        
        # 返回一个对象 即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。request不是必填参数
        user_obj = auth.authenticate(request,username=username,password=password)
        # print(user_obj)
        # print(user_obj.username)
        # print(user_obj.password)
        
        if user_obj:	# 返回值有可能为假 所以需要判断是否为真
            auth.login(request,user_obj)   # 为真的话 保存用户状态 用auth.login()方法
            
            ‘‘‘只要执行了login方法、那么在任意位置都可以通过request.user获取当前对象‘‘‘

    return render(request,‘login.html‘,locals())



def aa(request):
    ‘‘‘只要执行了login方法、那么在任意位置都可以通过request.user获取当前对象‘‘‘
    
    print(request.user) # 获取用户对象 如果没有登录就是匿名用户
    # print(request.user.username)
    # print(request.user.password)
    print(request.user.is_authenticated())  # 判断用户是否登录
    return HttpResponse(‘哈哈‘)



# 修改密码 
# 验证是否登录装饰器 导入模块↓
from django.contrib.auth.decorators import login_required

# @login_required(login_url=‘dl‘)  # 验证是否登录装饰器
@login_required    #  全局验证是否登录装饰器
def set_password(request):
    
    old_password = request.POST.get(‘old_password‘)  # 老密码
    new_password = request.POST.get(‘new_password‘)  # 新密码
    
    # 校验原密码是否相同 得到一个返回时 True or false
    # 用 request.user.check_password(老密码) 可以 自动校验
    is_right = request.user.check_password(old_password)
    # print(is_right)
    
    if is_right:  
        
        # 修改新密码  使用 request.user.set_password(新密码)方法
        request.user.set_password(new_password)
        
        # 一定要保存 不保存 修改无效
        request.user.save()
    return render(request,‘set_password.html‘,locals())

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<h1>用户登录</h1>
<form action="" method="post">
    {% csrf_token %}
    <p>username:<input type="text" name="username"></p>
    <p>password:<input type="text" name="password"></p>

    <button>提交</button>

</form>

</body>
</html>

set_password.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>

<h1>密码修改</h1>

<form action="" method="post">
    {% csrf_token %}  
    
    <p>username:<input type="text" name="username" value="{{ request.user.username }}" disabled></p>
        
    <p>old_password:<input type="text" name="old_password"></p>  # 输入老密码
        
    <p>new_password:<input type="text" name="new_password"></p>  # 输入新密码
        
    <input type="submit">

 
</form>

</body>
</html>

总结操作:

from django.contrib import auth

# 校验用户名密码是否正确
auth.authenticate(request,username=username,password=password)

# 保存用户状态
auth.login(request,user_obj)

# 查看用户是否登录
request.user.is_authenticated()

# 获取用户对象
request.user

# 校验原密码是否正确
request.user.check_password()

# 修改密码 
request.user.set_password()
request.user.save()


# 校验是否登录装饰器
from django.contrib.auth.decorators import login_required
"""
跳转全局配置
	只需在settings配置文件下写入
	LOGIN_URL = ‘/lg/‘
	直接在你想要装饰的对象上写入@login_required即可
	
跳转局部配置
	@login_required(login_url=‘/lg/‘)
"""

[Django高级之Auth模块]

标签:oct   char   utf-8   href   trap   token   link   djang   改密码   

原文地址:https://www.cnblogs.com/liupengfei1123/p/14839780.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!