【Django】登录后回到之前的页面

在任意页面点击登录,登录成功后,跳转到之前点击登录的那个页面

1. 用户在A.html页面点击登录
2. 用户到登录页面login.html
3. 用户输入信息登录成功
4. 自动跳转回到A.html

  1. 所有的登录链接路径:{% url 'login' %}?next={{ request.path }}

    <a href="{% url 'login' %}?next={{ request.path }}">登录</a>
    <!-- request.path: 当前页面的url -->
    

    GET路径为:.../login/?next=当前url/

  2. login视图函数获取next的值:next=request.GET.get('next','/')
    在返回的login页面的登录表单中添加:<input type="hidden" name="next" value="{{ next }}">

  3. 将登录表单的值包括$('input[name="next"]')的值提交到视图函数,视图函数获取next值进行下一步跳转。


/views.py

def login(request):
	if request.method == "POST":
		ret = {
			'status': None,
			'msg': '',
		}

		username = request.POST.get("username")
		password = request.POST.get("password")
		next = request.POST.get('next')

		if geetest_auth.geetest_auth(request):
			user = auth.authenticate(username=username, password=password)
			if user:
				auth.login(request, user)
				ret["msg"] = next
			else:
				ret["status"] = 1
				ret["msg"] = "用户名或密码错误!"

		return JsonResponse(ret)

	elif request.method == "GET":
		next = request.GET.get('next', '/')
		return render(request, "login.html", {'next': next})

原文地址:https://www.cnblogs.com/q1ang/p/10060822.html