django 基于cookie的登录验证
admin
2023-07-16 10:24:05
0
urls.py
url(r'^admin/', admin.site.urls),
url(r'^set_cookie/',views.set_cookie),
url(r'^get_cookie/',views.get_cookie),
url(r'^login/',views.login),
url(r'^order/',views.order),
url(r'^shopping/',views.shopping),
views.py
from django.shortcuts import render, HttpResponse, redirect


# 测试的时候要记得清理缓存哦
# Create your views here.
# 登录认证装饰器
def login_auth(func):
    def inner(request, *args, **kwargs):
        # 拿到之前访问的路径
        url = request.get_full_path()
        is_login = request.COOKIES.get('is_login')
        if is_login:
            res = func(request, *args, **kwargs)
            return res
        else:
            return redirect('/login/?next=%s' %url)
            # return redirect('/login/')

    return inner


# ------------------------
def set_cookie(request):
    obj = HttpResponse('ok')
    obj.set_cookie('name', 's_jun')
    return obj


def get_cookie(request):
    print(type(request.COOKIES))
    print(request.COOKIES)
    name = request.COOKIES.get('name')
    obj = HttpResponse("get_cookie")
    return obj


# -------------------------------------------------------------
# 新的login,拿到之前访问的路径
# 访问/order/ (没有登录,并且删除cookie)页面的时候,会跳到/login/?next=/order/的页面,若是成功登录以后,变会跳到之前访问的路径.(例如:/order/)
def login(request):
    if request.method == "GET":
        return render(request, 'login.html')
    else:
        next = request.GET.get('next')
        name = request.POST.get('name')
        pwd = request.POST.get('pwd')
        if name == 's_jun' and pwd == '123':
            if next:
                obj=redirect(next)
            else:
                obj=redirect('/shopping/')
            obj.set_cookie('is_login', True)  # 设置cookie
            return obj
        else:
            return HttpResponse('用户名或密码错误')


# 原来的login
# def login(request):
#     if request.method == "GET":
#         return render(request, 'login.html')
#     else:
#         name = request.POST.get('name')
#         pwd = request.POST.get('pwd')
#         if name == 's_jun' and pwd == '123':
#             obj = HttpResponse('登录成功,写入cookie,请刷新页面后查看cookie,返回/order/或者/shopping/,页面查看登录结果')
#             obj.set_cookie('is_login', True)  # 设置cookie
#             return obj
#         else:
#             return HttpResponse('用户名或密码错误')


#  ↑上login 函数与(http://127.0.0.1:8000/order,访问时,若没有登录的情况下,会自动跳转到/login/的页面中,只有登录了才可以看到 http://127.0.0.1:8000/order/的这个页面中(没有跳转到/login/的页面中) )order函数下↓
# 此是为了判断cookie是否存在,存在的话便会看到order的页面中
# 基于cookie 写了登录验证
# def order(request):
#     is_login = request.COOKIES.get('is_login')  # 获取cookie
#     # 判断是否有cookie,获取到的话会看到"我是订单页面,我得登录才能看",获取不到会返回到/login/页面中
#     if is_login:
#         return HttpResponse('我是订单页面,我得登录才能看')
#     else:
#         return redirect('/login/')
#
#
# def shopping(request):
#     is_login = request.COOKIES.get('is_login')  # 获取cookie
#     if is_login:
#         return HttpResponse('我是购物页面,我得登录才能看')
#     else:
#         return redirect('/login/')


# 登录验证语法糖
@login_auth
def order(request):
    return HttpResponse('我是订单页面,我得登录才能看')


@login_auth
def shopping(request):
    return HttpResponse('我是购物页面,我得登录才能看')

相关内容

热门资讯

从“全球购”到“卖全球”:中国... 无尘生产车间里,数台进口的高端设备组成的智能生产线正有条不紊地运转着。智能视觉自动识别奶嘴朝向,机械...
黄河科技学院参赛作品获国家级乡... 近日,从农业农村部“第五届印迹乡村创意设计大赛”评审中传来喜讯,黄河科技学院乡村建设和文化创意产业研...
万祥·紫境湖畔生活馆启幕 6月3日,万祥·紫境湖畔生活馆启幕。启幕仪式上,项目营销负责人周益如将万祥深耕郑州的匠心之路娓娓道来...
黄河科技学院举行中国国际大学生... 5月30日,黄河科技学院2025年中国国际大学生创新大赛表彰会暨2026年校赛决赛在新工匠大讲堂举行...
精彩首秀汉诺威!中联重科应急装... 当地时间6月1日,2026汉诺威国际消防安全展于德国汉诺威会展中心盛大启幕。作为全球消防救援领域极具...
今天,ChatGPT+Code... 新智元报道 【新智元导读】OpenAI重磅Codex与ChatGPT,即将迎来史诗级合体!Code...
原创 4... 还记得吗?七年前,当我们还在讨论5G什么时候才能用上的时候,很多人都特别纠结。我的一个同事那时就在办...
让构网无处不在,让AI无所不及... 【中国,上海,2026年6月3日】今日,在SNEC2026期间,以“构建智能世界的绿电驱动力”为主题...
苹果实况图被指精准选丑!客服回... 6月4日消息,今日,“苹果实况你要毁了小猫” 的相关话题登上热搜,大量用户反馈苹果实况照片存在系统自...
苹果首款折叠屏 iPhone ... 据多家供应链消息源今日确认,苹果首款折叠屏 iPhone 的关键铰链和柔性屏幕组件已送交全球主要运营...