27

我认为这应该很容易,但我无法弄清楚。我正在尝试编写一个退出视图。我收到一个获取请求。通过 urls.py,我呈现了我的退出视图。在这个视图中,我将用户的一些参数保存在数据库中,然后我想将用户重定向到外部 URL。我试过了:

return redirect('http://stackoverflow.com/')

来自Django 文档。但是,optout 视图呈现训练模板而不是返回重定向,尽管参数按预期保存在数据库中。我的代码如下:

def optout(request):
    if (('REMOTE_USER' in request.META and request.META['REMOTE_USER'] != "") or 
        (request.session.get('userid', False) and request.session['userid'] != "")):
        if ('REMOTE_USER' in request.META and request.META['REMOTE_USER'] != ""):
            userid = request.META['REMOTE_USER']
        if (request.session.get('userid', False) and request.session['userid'] != ""):
            userid = request.session['userid']
        user = User.objects.get(username=userid)
        user.optout = True
        user.postpone = False
        user.save()
        return redirect('http://stackoverflow.com/')
    context = { 'userid': "" }
    return render(request, 'games/Training.html', context)

非常感谢任何帮助。

4

2 回答 2

31

是的,return redirect('http://stackoverflow.com/')是正确的方法。

如果您执行以下操作,您可以确认这是一种重定向的工作方法。

   from django.shortcuts import redirect

   def optout(request):
       return redirect("http://stackoverflow.com/")

您的条件语句一定不能引起注意。

于 2016-03-09T22:22:40.423 回答
13

使用类HttpResponseRedirect

from django.http import HttpResponseRedirect

def out(request):
    return HttpResponseRedirect("http://google.com")

或者:

使用类HttpResponse

from django.http import HttpResponse

def out(request):
    response = HttpResponse("", status=302)
    response['Location'] = "scheme://host"
    return response

笔记:

最后一个对于从网站重定向到移动(Android/Iphone)应用程序很有用。位置在哪里scheme://host

于 2018-09-07T01:17:02.213 回答