Django:删除后仍然显示行 - 因为缓存?

时间:2011-12-23 17:09:46

标签: django http nginx datatables gunicorn

我写过一个使用DataTables的Django应用程序。问题是当我从表中删除一行时,它仍然在对nginx / gunicorn运行时显示在表中。但是,当我在Django测试服务器上运行时,它可以正常工作。因此,如果我使用此命令行启动服务器:

python manage.py runserver 192.168.0.1:8000
一切正常。也就是说,我删除了行,表刷新,并且不显示删除的行。

这是HTTP调用的摘要:

// An initial GET command to populate the table
GET /myapp/get_list (returns a list to display)

// I now select a row and delete it which causes this POST to fire
POST /myapp/delete (deletes a row from the list)

// After the POST the code automatically follows up with a GET to refresh the table
GET /myapp/get_list (returns a list to display)

问题是当我使用nginx / gunicorn时,第二个GET调用返回与第一个GET相同的列表,包括我知道已从后端数据库中删除的行。

我不确定这是一个缓存问题,因为这是我从第一个GET获得的响应头:

Date    Fri, 23 Dec 2011 15:04:16 GMT
Last-Modified   Fri, 23 Dec 2011 15:04:16 GMT
Server  nginx/0.7.65
Vary    Cookie
Content-Type    application/javascript
Cache-Control   max-age=0
Expires Fri, 23 Dec 2011 15:04:16 GMT

4 个答案:

答案 0 :(得分:1)

通过向服务器发送添加的参数,以便浏览器不缓存调用,也可以解决问题。使用jQuery,您只需使用:

$.ajaxSetup({ cache: false});

否则您必须手动创建参数。通常你创建一个时间戳

var nocache = new Date().getTime();
//send nocache as a parameter so that the browser thinks it's a new call

答案 1 :(得分:1)

您可以使用Django的add_never_cache_headers或never_cache装饰器告诉浏览器不要缓存给定的请求。文档为here。我认为这比在javascript中强制缓存更清晰。

    from django.utils.cache import add_never_cache_headers

    def your_view(request):
        (...)
        add_never_cache_headers(response)
        return response

    from django.views.decorators.cache import never_cache

    @never_cache
    def your_other_view(request):
            (...)

答案 2 :(得分:0)

试试这个

oTable.fnDeleteRow( anSelected, null, true );

和b.t.w您使用的是哪个版本的数据表?

答案 3 :(得分:0)

我通过更改

解决了问题
  

GET / myapp / get_list

  

POST / myapp / get_list

执行此操作后,我不再获得缓存响应。