【问题标题】:.Save() with django redirect.Save() 与 Django 重定向
【发布时间】:2014-09-04 20:16:11
【问题描述】:

我正在使用一个 API,它在重定向上一页之前将一些信息保存到用户配置文件中。它看起来像这样:

首先,在 feed.views 中加载 'home/id' 的视图

def home(request, id):
    request.session["next"] = id
    # do stuff to load the page, i.e. adding stuff to context dictionary
    return render_to_response('home/' + id + '.html', context)

使用 API 捕获注册的视图:

def API(request):
    user = request.user
    # get some info from api here
    user.save() 
    redirect_url = '/home/' + request.session["next"]
    return redirect(redirect_url, permanent=True)

问题:这不会将信息保存到“用户”,但仍会重定向回“家庭/ID”。我之前试过这个,实际上出于某种原因保存了信息:

def API(request):
    user = request.user
    # same stuff
    user.save()
    from feed.views import home
    return home(request, request.session["next"])

但是这种方式不会将 url 更改回上一页,这是我需要的。有什么想法我能做什么?

【问题讨论】:

  • 您能否为每个不起作用的视图粘贴更多代码。在第一个你打电话给user.save() 而在第二个你不是。再加上你redirect urls 在每个地方都不一样,所以也许这就是他们重定向到不同地方的原因。
  • 完成,如果您需要更多,请告诉我
  • 您在第二个 API 视图中缺少此内容:redirect_url = '/home/' + request.session["next"],然后在您的“return”语句中进行测试。
  • 这与我当时的第一个 API 视图完全相同。我试图证明第二个 API 视图的工作原理是将数据保存给用户,但第一个 API 视图不会将数据保存给用户。仔细看,两个return语句是不一样的。一个重定向,而第二个调用另一个视图函数。

标签: django api templates save models


【解决方案1】:
redirect(redirect_url, permanent=True)

permanent 参数将发出 301 状态代码。这告诉浏览器该页面被永久移动。你的浏览器会保存这些信息,下次你请求这个页面时,你的浏览器甚至不会尝试获取旧页面(你的API视图),而是直接加载新的url(你的home视图)。

要解决此问题,请删除 permanent=True 参数,并清除浏览器缓存。

使用重定向,而不是返回另一个视图函数的结果;如果不这样做,将导致在重新加载页面或按下浏览器中的后退按钮时将数据重新发送到服务器。

【讨论】:

    猜你喜欢
    • 2013-01-14
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2012-02-21
    • 2011-09-16
    • 2016-04-11
    • 2016-07-26
    相关资源
    最近更新 更多