Как заставить полную перезагрузку страницы после POST - PullRequest
0 голосов
/ 04 апреля 2019

Я использую представление на основе классов с методами get и post

class MyView(View):
    def get(self,request, *args, **kwargs):
        #some code
    def post(self,request, *args, **kwargs):
        #update some data which is used in the view
        return redirect('app:my-view')

проблема в том, что django не выполняет метод get повторно после перенаправления (запрос GET может быть подтвержден в firebug). Если я нажму F5 вручную в браузере, я смогу увидеть измененные данные.

Это, вероятно, проблема с кешем, но я хочу обновить страницу, но если страница не перезагружается в GET после POST, я не могу этого сделать.

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Ваше перенаправление фактически работает, но когда вы отправляете запрос с помощью Ajax , ваш браузер не перенаправляется, перенаправляется только ваш запрос ajax, и это не изменит URL страницы в браузер.

В этом и заключается весь смысл ajax-запросов: вы обмениваетесь информацией с сервером без изменения URL браузера. Все, что вы делаете с ajax-запросами, не влияет на URL браузера.

Если вместо этого вы разместите html-форму без ajax по этому URL, ваш метод post будет выполнен, а затем ваша страница будет перенаправлена ​​с запросом get.

Чтобы делать то, что вы хотите с ajax, я предлагаю вам не перенаправлять в конце вашего почтового запроса, а возвращать успешный ответ. Затем на стороне клиента выполните запрос ajax и перезагрузите страницу в обработчике успеха вашего запроса.

0 голосов
/ 04 апреля 2019

Чтобы решить эту проблему, вы должны перенаправить вызов Ajax:

$.post("",{active: status,
        success: function(){
          window.location = "";
        },
        'csrfmiddlewaretoken':jQuery("[name=csrfmiddlewaretoken]").val()});

Это делается с помощью window.location=""; Я передаю пустую строку, потому что я перенаправляю на ту же страницу, но вы можете передать любой URL.

...