android - Django 媒体文件和改造

标签 android python django retrofit

我们在一个项目中使用 Android 前端django-rest-framework 后端

媒体文件是通过 Django Media files 提供的,我们可以缓存媒体文件并在离线时在应用程序中查看它们。

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),    
    url(r'auth/login/', 'rest_framework_jwt.views.obtain_jwt_token',name='jwt_login'),        # post username & password to get token    
...

) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

问题是我们需要对媒体文件应用授权,所以我从 url 中删除了 media paths 并添加了一个 View 来完成这项工作

@api_view(['GET'])
def media_image_handler(request,url):
    # extra code before serving media
    ...
    ...
    # read and return media file to response

并且 url.py 更改为:

urlpatterns = patterns('',
    url(r'^media/(?P<url>.*)/$',media_image_handler, name='media'), 
    url(r'^admin/', include(admin.site.urls)),    
    url(r'auth/login/', 'rest_framework_jwt.views.obtain_jwt_token',name='jwt_login'), 
)

现在我们有两个问题:

  1. 由于额外的代码响应时间变得更长
  2. 无法离线加载缓存文件

现在问题:

Is there any suitable method that can be used instead? For example instead of full authentication use a random generated file names that cannot be guessed easily or whatever?

我们将不胜感激任何有用的意见

P.S. We are using Retrofit and Picasso on Android

最佳答案

首先:静态文件应该由像 nginx 或 lighttpd 这样的服务器提供服务。关于你的问题。我认为您是在谈论受控下载。该功能调用X-Sendfile,在nginx等服务器中实现。您可以在 Nginx 文档中阅读相关信息。 https://www.nginx.com/resources/wiki/start/topics/examples/xsendfile/

关于android - Django 媒体文件和改造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33565774/

相关文章:

python - 将 Voronoi 图渲染为 numpy 数组

python - 在 Keras 回调中访问变量

python - Django 完整性错误 "Column 'section_id' 不能为空”

java - Android 共享首选项崩溃

android - Realm createAllFromJson 抛出 BEGIN_ARRAY 但 BEGIN_OBJECT 异常

python - 如何在 Google Composer 上重启 Airflow 服务器?

python - Django/PIL 错误 - 呈现 : The _imagingft C module is not installed 时捕获异常

django - 有没有办法像 Sass 一样在 Django 模板中使用 mixin?

安卓锁屏

android - 在 Eclipse 中抑制未实现的方法