from django.db.models import Avg, Count, Sum, Max, Min # 导入方法
from django.db.models import F, Q
from django.shortcuts import render, redirect
# Create your views here.
# 设置cookie判断装饰器,用于对login之后的路径的校验
def login_required(func):
def inner(request, *args, **kwargs): # 给装饰器传递参数
"""
############################################################
"""
# if:如果cookie认证不过的话
# if request.COOKIES.get('is_login') != '1': # 在访问某个路径之前,先从cookie中判断是否 is_login = 1
if request.session.get('is_login') != '1':
"""
############################################################
"""
next_url = request.path_info # 如果不是1(在没有cookie的状态下访问),则获取用户输入的路径,并保存
print(next_url)
return redirect('/login/?next={}'.format(next_url)) # 不过则进入login页面,将拼接的url放在浏览器地址栏
ret = func(request, *args, **kwargs) # 执行对应函数
return ret
return inner
# 登录函数
def login(request):
if request.method == 'POST':
username = request.POST.get('username') # 获取用户名
password = request.POST.get('pwd') # 获取密码
if username == 'leon' and password == '123': # 校验用户名&密码
next_url = request.GET.get('next') # 获取拼接的next路径
if next_url: # 如果存在,即代表用户之前已经访问对应url
aim_url = redirect(next_url) # 之后直接访问之前想访问的路径
else:
aim_url = redirect('/index/')
"""
############################################################
"""
# aim_url.set_cookie('is_login', # is_login 状态设置为 1
# '1',
# max_age=60
# ) # 设置cookie,cookie的有效时间是60秒
request.session['is_login'] = '1' # session 版本的认证
request.session.set_expiry(0) # 浏览器一旦关闭,session就会失效
"""
############################################################
"""
return aim_url # 设置完cookie就返回这个网页
return render(request, 'login.html')
# 登录返回index
@login_required # cookie判断
def index(request):
# 执行完 cookie认证之后...
return render(request, 'index.html')
# 注销
def logout(request):
##############################################################
aim_url = redirect('/login/') # 退出则返回到 login 页面
# aim_url.delete_cookie('is_login') # 退出顺手就把 cookie 给删除了
request.session.flush() # 注销的时候,清空 session
##############################################################
return aim_url
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。