与RedirectView的反应不可预测

时间:2015-11-20 15:51:45

标签: python django firefox django-views django-urls

我有一个简单的RedirectView:

class SetDefaultCustomerAccount(LoginRequiredMixin, RedirectView):
    permanent = False

    def get_redirect_url(self, *args, **kwargs):
        # set default account)
        print("FOOO!!!!!!!")
        self.request.user.default_customer_account = get_object_or_404(CustomerAccount, id=self.kwargs['account_id'])
        self.request.user.save()

        return reverse("users:detail",
                       kwargs={"username": self.request.user.username})

通过路线呼叫:

# URL pattern for the setting a default customer account to a user
url(
    regex=r'^set_default_account/(?P<account_id>[0-9]+)$',
    view=views.SetDefaultCustomerAccount.as_view(),
    name='set_default_account'

一个细节:我的用户模型中的'default_customer_account'ForeignKey是optionnal(null = True,blank = True)。

在我的数据中,我有两个CustomerAccount,ID为1和2。

当我获取'127.0.0.1:8000/users/set_default_account/2'时,我的代码没有打印'FOOO !!!!!!!“。与'127.0.0.1:8000/users/set_default_account/相同2' 。

虽然,我确信我在第一次通话中得到了正确的结果(即,记录用户的默认客户帐户已更改)。

问题是:RedirectView的行为是否有所不同,具体取决于调用的时间?

更新 使用Safari时一切正常,所描述的问题出现在firefox中。 有人有类似issue here(但这不能解决我的问题)。

1 个答案:

答案 0 :(得分:0)

谢谢to this thread我发现Firefox正在缓存我的301重定向页面。

解决方案是在RedirectView中设置permanent = False,以便响应更改为302,Firefox不会将此重定向保存在缓存中。