Django---内置模块和装饰器

1.内置用户模块

from django.contrib.auth.model import User

2.登录模块
1)验证账号密码是否正确
django.contrib.auth import authenticate
user = authenticate(username=..,password=..)
2)记录用户状态,状态保持
django.contrib.auth improt login
login(request, obj对象)
将对象存储在系统中,后续可以在任何地点通过request.obj对象 直接使用
3)logout退出系统
django.contrib.auth improt logout
logout(request)
清空该请求对应会话中的所有数据

# (authenticate)验证用户账号密码是否正确函数
# (login)记录用户状态
# (logout)用户退出函数
from django.contrib.auth import  authenticate, login, logout


def user_login(request):
    username = request.POST.get('username')
    userpass = request.POST.get(''userpass)

    # 验证账号,密码是否正确
    user = authenticate(username=username, password=userpass)
    if user is not None:
        if user.is_active:
            # 记录登录状态
            login(request, user)
            # 调到首页
            return HttpResponseRedirect('/')
        else:
            return render(request, 'user/login', {'msg': '账号已经被锁定'})
    else:
        return render(request, 'user/login', {'msg': '账号或密码有误'})

3.登录认证
from django.contrib.auth.decorators import login_requried
@login_required装饰器 ~添加到函数上,要求被装饰的函数必须具有登录权限才能访问,否则跳到指定页面[LOGIN_URL]
(1)需求分析
1)当我们在网页上点击了某个链接,跳转到登录页面
2)当我们完成登录后,没有跳转到首页,直接跳转到登录前访问的那个页面
(2)过程分析
1)Django中,当用户没有登录访问某个特殊函数[@login_required]修饰的函数
2)跳转到登录界面,用户登录,并附带了一个参数next(包含的就是用户即将访问的页面路径)
3)用户登录成功后,就可以直接跳转到next指定的路径


setting.py文件中要加上以下代码
LOGIN_URL = '/user/login/'

def user_login(request):
 if request.method == 'GET':
     next = request.GEt.get('next')
     if next is None:
         next = '/'
    return render(request,'user/login.html', {'next':next})
elif request.method == 'POST':
    username = request.POST.get('username')
    userpass = request.POST.get('userpass')
    next = request.POST.get('next')
    # 验证账号
    user = authenticate(username=username, password=userpass)
    if user is not None:
        if user.is_active:
            # 记录登录状态
            login(request, user)
            # 跳转到登录前的界面
            return HttpResponseRedirect(next)
        else:
            return render(request, 'user/login', {'msg': '账号已经被锁定'})
    else:
        return render(request, 'user/login', {'msg': '账号或密码有误'}) 

<!--h5代码-->
<form action='/user/login' method='POST'>
    {%csrf_token %}
    <!--隐藏的next值-->
    <input type='hidden' name='next' value='next'>
    <input type='text' name='username' value='username'>
    <input type='password' name='userpass' value='userpass'>
    <input type='submit' value='提交'>
</form>

4.请求方式装饰器
添加到视图处理函数上,要求视图处理函数必须通过指定的请求方式访问,否则405(请求不支持)
from django.views.decorators.http import request_GET/request_POST

 from django.views.decorators.http import request_GET/request_POST 

# 定义一个函数
@request_GET
def login(request):
    pass

猜你喜欢

转载自blog.csdn.net/jian15093532273/article/details/80002607
今日推荐