用django编写的大文件传输应用程序

django-bft的Python项目详细描述


简介

django bft是处理大型文件传输的django应用程序。这个 应用程序的前端既有flash上传,也有javascript 上传版本

django bft最初是为犹他州立大学创建的 以满足通过电子邮件发送大文件的特定需要。

可在https://bft.usu.edu

要求

  1. Web服务器

    apache使用mod wsgi是首选的web服务器,目前, 是唯一用django bft测试过的web服务器Web服务器,如 lighttp和nginx可以工作,但尚未测试。

    注意:django bft在上传期间使用ajax显示进度条。 因此,django开发web服务器将无法上载文件 因为它是单线程的

  2. 数据库

    Django支持的所有数据库都应该与Django bft一起工作。 (Postgres、MySQL和Oracle)

  3. Django

    django bft是使用django(1.3)的最新版本创建的。 django 1.1x或更高版本可能会工作,但是随着static的方式的改变 文件处理完毕,建议您安装django static files进行静态文件服务。

    参考:https://github.com/jezdez/django-staticfiles

安装

要启动并运行此应用程序,请执行以下步骤:

  1. 使用您选择的设置创建Django生产环境。 参考:http://docs.djangoproject.com/en/dev/intro/install/

  2. 创建新的django项目:

    $ django-admin.py startproject <projectname>
    
  3. 将django bft安装到PYTHON路径或项目中的文件夹中:

    • 从PIP安装:

      $ pip install django-bft
      
    • Download并从源安装:

      $ python setup.py install
      
    • 将源安装到本地目录:

      $ python setup.py build
      $ cp build/lib/bft /<PROJECT_ROOT>/
      
  4. 将以下内容添加到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
      
    • (可选)-您可能需要更改 文件上传目录。此设置是文件的位置 将在上载时临时存储。默认为 操作系统临时目录如果这里的空间有限 目录,建议更改此设置

  5. 根据需要修改app_settings.py

  6. 如果要使用reCaptcha,则需要公钥和私钥

    请参阅:http://www.google.com/recaptcha

    python recaptcha库也是必需的。你可以安装它 使用pip:

    $ pip install recaptcha-client
    
  7. 因为这个应用程序是用来上传非常大的文件的 使用django的限制是不推荐的,而且很少见。这样更好 在Web服务器层上添加此强制。你可以在apache上这样做 通过向apache配置添加以下指令:

    LimitRequestBody 1073741824 #The same size as specified in your app_settings.py file
    ErrorDocument 413 http://<SERVER_NAME>/413error/
    
  8. 如果你关心你的文件是否安全,你可能会想保护 使用apache存储文件的目录:

    <Location /media/files>
            Order allow,deny
            Deny from all
    </Location>
    

    您还可以考虑添加必要的指令来重定向 到SSL的非SSL通信:

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    
  9. 将url.py映射到django bft的url。例如:

    urlpatterns = patterns('',
            ...
            (r'', include('bft.urls')),
    )
    
  10. 设置cron作业以处理文件存档和删除一个例子 可能是:

    #!/bin/sh
    
    ./manage.py deleteuploads
    ./manage.py deletetempfiles
    
  11. 别忘了收集静态文件并同步数据库:

    $ python manage.py syncdb
    $ python manage.py collectstatic
    

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用反射访问class字段类型的class变量?   swing Java:强制JFileChooser到一个目录及其子文件夹   java当我试图在maven项目中使用@ResController时,它显示错误“RestController无法解析为类型”。帮我解决这个问题   java为什么我的数字不在数组中记录和打印?   java如何将字符串参数传递给函数?   如何在java中高效地将标准输出继承到子进程?   java Eclipse,在Project Explorer视图中拥有文件属性的TreeViewer   java H2:无法从jar中的sql文件初始化DB架构   java Dispose窗口而不关闭整个程序   java专用模块和/或提供程序的简单使用   java Hibernate为下一个序列提取第二个上一个id值   调整屏幕大小时java JavaFX调整画布大小   java StringIndexOutOfBound异常   反射如何动态创建新的。java程序中的java文件?   java如何实现“带映射的Setter注入”   java如何使Spring控制器在传输所有请求主体(并将主体作为流处理)之前被调用?   java返回并持久化LinkedHashMap,而不是JPA实体中的Map   java默认情况下,时间戳是否显示在HBase表中?