用django编写的大文件传输应用程序
django-bft的Python项目详细描述
简介
django bft是处理大型文件传输的django应用程序。这个 应用程序的前端既有flash上传,也有javascript 上传版本
django bft最初是为犹他州立大学创建的 以满足通过电子邮件发送大文件的特定需要。
要求
Web服务器
apache使用mod wsgi是首选的web服务器,目前, 是唯一用django bft测试过的web服务器Web服务器,如 lighttp和nginx可以工作,但尚未测试。
注意:django bft在上传期间使用ajax显示进度条。 因此,django开发web服务器将无法上载文件 因为它是单线程的
数据库
Django支持的所有数据库都应该与Django bft一起工作。 (Postgres、MySQL和Oracle)
Django
django bft是使用django(1.3)的最新版本创建的。 django 1.1x或更高版本可能会工作,但是随着static的方式的改变 文件处理完毕,建议您安装django static files进行静态文件服务。
安装
要启动并运行此应用程序,请执行以下步骤:
使用您选择的设置创建Django生产环境。 参考:http://docs.djangoproject.com/en/dev/intro/install/
创建新的django项目:
$ django-admin.py startproject <projectname>
将django bft安装到PYTHON路径或项目中的文件夹中:
从PIP安装:
$ pip install django-bft
Download并从源安装:
$ python setup.py install
将源安装到本地目录:
$ python setup.py build $ cp build/lib/bft /<PROJECT_ROOT>/
将以下内容添加到settings.py文件中:
将“bft”、“staticfiles”和“admin”添加到已安装的应用程序:
INSTALLED_APPS = ( ... 'django.contrib.admin', 'django.contrib.staticfiles', 'bft', )
确保已配置静态文件查找程序:
STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.AppDirectoriesFinder', )
将“bft.context_processors.bft”添加到上下文处理器:
from django.conf import global_settings ... TEMPLATE_CONTEXT_PROCESSORS = ( 'bft.context_processors.bft', ) + global_settings.TEMPLATE_CONTEXT_PROCESSORS
将“bft.utils.upload_handlers.UploadProgressCachedHandler”添加到文件中 上载处理程序:
from django.conf import global_settings ... FILE_UPLOAD_HANDLERS = ( 'bft.utils.upload_handlers.UploadProgressCachedHandler', ) + global_settings.FILE_UPLOAD_HANDLERS
(可选)-您可能需要更改 文件上传目录。此设置是文件的位置 将在上载时临时存储。默认为 操作系统临时目录如果这里的空间有限 目录,建议更改此设置
根据需要修改app_settings.py。
如果要使用reCaptcha,则需要公钥和私钥
请参阅:http://www.google.com/recaptcha
python recaptcha库也是必需的。你可以安装它 使用pip:
$ pip install recaptcha-client
因为这个应用程序是用来上传非常大的文件的 使用django的限制是不推荐的,而且很少见。这样更好 在Web服务器层上添加此强制。你可以在apache上这样做 通过向apache配置添加以下指令:
LimitRequestBody 1073741824 #The same size as specified in your app_settings.py file ErrorDocument 413 http://<SERVER_NAME>/413error/
如果你关心你的文件是否安全,你可能会想保护 使用apache存储文件的目录:
<Location /media/files> Order allow,deny Deny from all </Location>
您还可以考虑添加必要的指令来重定向 到SSL的非SSL通信:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
将url.py映射到django bft的url。例如:
urlpatterns = patterns('', ... (r'', include('bft.urls')), )
设置cron作业以处理文件存档和删除一个例子 可能是:
#!/bin/sh ./manage.py deleteuploads ./manage.py deletetempfiles
别忘了收集静态文件并同步数据库:
$ python manage.py syncdb $ python manage.py collectstatic