Skr-Eric 2019-08-23 18:05 采纳率: 33.3%
浏览 554

django使用@login_required时出现重定向次数过多问题是怎么回事

报错如下:

图片说明

目录如下:

图片说明

index的views.py:
图片说明

login的views.py:

from django.shortcuts import render, redirect
from .forms import *


# Create your views here.


def login_views(request):
    if request.method == 'GET':
        # 获取请求源地址,如果没有的话则获取'/'
        url = request.META.get('HTTP_REFERER', '/')
        # print("请求源地址:"+url)
        # 判断session中是否有uid和uname
        if 'uid' in request.session and 'uname' in request.session:
            return redirect(url)
        else:
            # 判断cookie中是否有uid和uname,
            if 'uid' in request.COOKIES and 'uname' in request.COOKIES:
                # 如果有的话则取出来并保存进session,再回首页
                uid = request.COOKIES['uid']
                uname = request.COOKIES['uname']
                request.session['uid'] = uid
                request.session['uname'] = uname
                return redirect(url)
            else:
                form = LoginForm()
                # 构建响应对象,并将url保存进cookies
                resp = render(request, 'login.html', locals())
                resp.set_cookie('url', url)
                return resp
    else:
        # post请求
        # 获取请求源地址
        url = request.META.get('HTTP_REFERER', '/')
        # 接收uname和upwd判断是否登录成功
        uname = request.POST['uname']
        upwd = request.POST['upwd']
        user_name = Users.objects.filter(uname=uname)

        users = Users.objects.filter(uname=uname, upwd=upwd)
        # 如果成功继续向下执行,否则回到登录页
        if users:
            # 登录成功,将id和uname保存进session
            id = users[0].id
            request.session['uid'] = id
            request.session['uname'] = uname
            # 如果有记住密码则将数据保存进cookies
            # 先从cookies中将url的值获取出来
            url = request.COOKIES.get('url', '/')
            resp = redirect(url)
            # 如果url存在于cookies中的话,则将url从cookies中删除出去
            if 'url' in request.COOKIES:
                resp.delete_cookie('url')
            if 'isSave' in request.POST:
                expires = 60 * 60 * 24 * 365
                resp.set_cookie('uid', id, expires)
                resp.set_cookie('uname', uname, expires)
            return resp
        else:
            # 登录失败,回到登录页面
            message = '登录失败!'
            return redirect('/login/')
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 21:35
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮