使用中间件

时间:2015-12-16 14:19:03

标签: python django httprequest django-middleware

我有中间件,它将所有http请求存储到数据库中。

我也有观察,从数据库中提取数据并将这些数据放入上下文中。

views.py

def requests(request):
    http_requests = WebRequest.objects.all()
    context = {
        "http_requests": http_requests
    }
    return render(request, "requests.html", context)

当新请求进入时,如何异步更新此页面上的数据(因此,新请求应异步出现在此页面上)?我可以只使用Django功能来实现这种行为,还是需要使用一些javascript库?

1 个答案:

答案 0 :(得分:1)

这取决于您希望在项目上花费多少时间。正如Lorenzo所说,创建一个API并让javascript框架(例如emberjs或angularjs)处理异步可能是有意义的。我不认为你可以用纯django处理这个... 如果你没有时间参加某些“黑客攻击”。您可以通过轮询网址并用响应替换整个文档来替换页面内容:

 $.ajax({
        type: "GET",
        url: "<url_to_your_requests_view>",
        success: function(response){
            $('body').html(response);
        }
    });

这不干净,但应该是一个快速的肮脏技巧......

编辑:如果您只想更换网站的某些部分,可以将其细分为仅向页面添加元素:

 $.ajax({
        type: "GET",
        url: "<url_to_your_requests_view>",
        success: function(response){
            var newlyAddedRows = // find your newly added rows through some jquery
            newlyAddedRows.forEach(function(row){
                $('#request-holder').append(row);
            });

        }
    });

或与JSON

 $.ajax({
        type: "GET",
        url: "<url_to_your_requests_api_endpoint>",
        success: function(response){
            var requestRows = response.requestItems
            var $requestsHolder = $('#request-holder');
            $requestHolder.empty();
            requestRows.forEach(function(row){
                requestsHolder.append('<div class="request-row">' + <visualize your data somehow> + '</div>'); //e.g. row.timestamp if you have that in your json
            });

        }
    });