我有一个Ajax调用,它更新了数据库中的5,000条记录,因此这需要花费很多时间.我有一个Ajax"正在加载图片",显示正在发生的事情,但我正在寻找一种更好的方式来显示"正在更新50的5000 ...","更新200的5000",或类似的东西.
在不执行5000个不同帖子的情况下,在Ajax/jQuery中执行此类操作的最佳方法是什么?
我正在尝试将csv文件作为附件下载流式传输.CSV文件大小为4MB或更多,我需要一种方法让用户主动下载文件,而无需等待创建所有数据并首先提交到内存.
我首先使用自己的基于Django FileWrapper类的文件包装器.那失败了.然后我在这里看到了一个使用生成器来传输响应的方法:
如何使用Django流式传输HttpResponse
当我在生成器中引发错误时,我可以看到我正在使用该get_row_data()函数创建正确的数据,但是当我尝试返回响应时它返回空.我也禁用了Django GZipMiddleware.有谁知道我做错了什么?
编辑:我遇到的问题是ConditionalGetMiddleware.我不得不更换它,代码在下面的答案中.
这是观点:
from django.views.decorators.http import condition
@condition(etag_func=None)
def csv_view(request, app_label, model_name):
""" Based on the filters in the query, return a csv file for the given model """
#Get the model
model = models.get_model(app_label, model_name)
#if there are filters in the query
if request.method == 'GET':
#if the query is not empty
if request.META['QUERY_STRING'] != None:
keyword_arg_dict = {}
for key, value in request.GET.items():
#get the query filters …Run Code Online (Sandbox Code Playgroud) 如何在Apache2中禁用mod_deflate
要么
我有一个Django应用程序服务于一个HTML5元素的网页.有一个奇怪的"功能",将视频元素转为不可搜索:video.seekable返回一个timeRanges对象length=0,而它应该是length=1.
这意味着我无法编辑视频.JavaScript也无法做任何事情.
问题是,当我上传有问题的网页时,静态 - 没有Django,只是简单的HTML/JS/CSS - 到我的网站进行测试,它运行正常 - length=1.
但是,如果我尝试在我的Django dev服务器上提供相同的静态页面仍然会出现同样的问题.
我正在使用Django的静态服务进行开发/调试 - 你知道是什么导致这个,或者我该如何解决它?
谢谢.
我有一个如下的观点:
from django.views.decorators.http import condition
def stream():
for i in range(0, 40):
yield " " * 1024
yield "%d" % i
time.sleep(1)
@condition(etag_func=None):
def view(request):
return HttpResponse(stream(), mimetype='text/html')
Run Code Online (Sandbox Code Playgroud)
但是,它似乎根本不是流媒体.在大约40秒后,所有数据在最后一次被转储.如何让它正确冲洗?
由于每个问题最好只有一个问题,如果与我同一项目的另一部分相似,请耐心等待.
情况:
我在html上有一个表单,我可以在其中设置一个数字,当它被提交时,调用views.stream_response将值传递给stream.py并返回StreamingHttpResponse并显示"虚拟"空白浏览器页面(/ stream_response /),其中我可以每秒钟看到一个渐进的数字m:
1
2
3
..
m
Run Code Online (Sandbox Code Playgroud)
stream.py
import time
def streamx(m):
lista = []
x=0
while len(lista) < m:
x = x + 1
time.sleep(1)
lista.append(x)
yield "<div>%s</div>\n" % x
print(lista[-1])
return (x)
Run Code Online (Sandbox Code Playgroud)
--- UPDATE ---
views.py
def stream_response(request):
test = InputNumeroForm()
if request.method == 'POST':
test = InputNumeroForm(data=request.POST)
if test.is_valid():
m = test.cleaned_data['numero']
print (test)
print("m = ", m)
#resp = StreamingHttpResponse(stream_response_generator(m))
resp …Run Code Online (Sandbox Code Playgroud) 如果我StreamingHttpResponse 按此处所示实现,则直到10秒钟才会显示"流媒体"响应.关于djangoproject的信息不多,只是说它对生成大型CSV文件很有用,同时警告昂贵的任务应该在请求 - 响应周期之外执行.
但是,我看不到它使用时间密集的代码.生成器对象有什么可以防止这种情况吗?这是重复的代码供参考.
import time
from django.http import StreamingHttpResponse
def stream_response(request):
resp = StreamingHttpResponse(stream_response_generator())
return resp
def stream_response_generator():
for x in range(1,11):
yield '{} <br />\n'.format(x)
time.sleep(1)
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个每1分钟读取一次变量的函数,并返回每次的值.变量名是proc:
proc = subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz', '--info=progress2', source12, destination],
stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0]
Run Code Online (Sandbox Code Playgroud)
进度存储在proc变量中.我希望函数每1分钟轮询一次变量并返回值.这样做直到变量执行时为止.最好的方法是什么?
尝试使用:
def doWork():
while True:
proc = subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz', '--info=progress2', source12, destination],
stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0]stdout=subprocess.PIPE).communicate()[0]
data = sort(proc)
print data
time.sleep(10)
Run Code Online (Sandbox Code Playgroud)
虽然没有运气!它同时打印整个进度并循环.
我有一个算法,它等待近 5 秒来生成响应,我想在用户发送请求后立即向用户发送一个 ack(http 200),告诉他他的请求已收到并等待 5 秒。
发电机功能:
def chunked_res():
yield "Chunk 1"
stop = time.time() + 5 # wait for 5 seconds
while time.time() < stop:
pass
yield "Chunk 2"
Run Code Online (Sandbox Code Playgroud)
在某些方面:
response = HttpResponse ( chunked_res() )
response['Connection'] = 'close'
response['Transfer-Encoding'] = 'chunked'
response['status'] = 200
return response
Run Code Online (Sandbox Code Playgroud)
浏览器中的响应:
"传输编码:分块\n状态:200\n连接:关闭\n内容类型:文本/html;字符集=utf-8\n\nChunk 1Chunk 2"
问题: 我得到了要求的响应(Chunk 1,Chunk 2),但在 5 秒后。我想先发送“Chunk 1”,然后在 5 秒后发送“Chunk 2”(更新响应)。是否有任何特定的设置/更改来实现这一点?
更新:
Django = 1.4 蟒蛇 = 2.7
我创建了一个用户上传视频的网站,我使用python函数逐帧处理视频.在这个函数中,我知道我已经处理了多少帧.我想在进度条中向用户显示进度.我google了很多,但几乎所有的进度条都用于上传,所以我该如何实现呢?谢谢!
Django 1.5 刚刚发布并提供了 StreamingHttpResponse。现在,我已经阅读了这个讨论 ,第二个答案实际上在页面中打印出流(实际上只是数据)。
我想要做的是将流响应的输出打印到模板中,而不仅仅是像讨论中那样打印数据。
我该怎么办?我是否必须使用 javascript 并调用实现 StreamingHttpResponse 的视图,或者有一种方法可以告诉 django 呈现模板,然后将 StreamingHttpResponse 数据发送到模板(然后我需要知道存储数据的变量是什么) ?
编辑:到目前为止我发现的解决方案是将最终 html 页面的部分写入生成器(产量)。这个解决方案的问题是,例如,我不能有一个随着数据流而增长的条(如加载条)。
再见
django ×8
python ×4
django-views ×2
streaming ×2
ajax ×1
apache ×1
apache2 ×1
csv ×1
html ×1
html5 ×1
html5-video ×1
http ×1
http-chunked ×1
httpresponse ×1
javascript ×1
jquery ×1
mod-deflate ×1
polling ×1
progress-bar ×1
stream ×1
templates ×1