2014-04-17 38 views
0

我想讓用戶提供一個url,django會自動下載,但不知道該怎麼做。提前致謝。Django:如何從用戶的給定url下載文件?

+0

更多信息將是很好的。 首先弄清楚如何下載url並自行處理。 一旦你確定了下來,然後看看處理Django表單並觸發下載。 –

回答

1

您可以使用requests library檢索網址。

要從用戶獲取URL,您可以使用form

然後,在視圖中,你可以這樣做

if request.method == 'POST': # If the form has been submitted... 

    form = URLForm(request.POST) # A form bound to the POST data 
    if form.is_valid(): # All validation rules pass 
     response = requests.get(form.entered_url,stream=True) 
     with open('save_file','w') as f: 
      for chunk in response.iter_content(): 
       f.write(chunk) 
     return HttpResponseRedirect('/thanks/') # Redirect after POST 
+1

還有一件事 - 最好將'stream'參數設置爲'True',這樣它就不會將整個文件下載到內存中。 'response = requests.get(form.entered_url,stream = True)',然後通過chunck讀取。開放(fullpath,'wb')作爲f:用於響應塊中的塊response.iter_content():f.write(塊)' –

+1

@AlexanderLarikov,我不知道!我會把它列入我的答案。 – bgschiller

1

我的建議是你用celeryrequest到asynchroniusly下載文件。有一個site,徹底解釋如何整合DjangoCelery