Python Nginx-如何在Django中的渲染页面上提供受保护的视频,而不是强制下载?

Python Nginx-如何在Django中的渲染页面上提供受保护的视频,而不是强制下载?,python,django,nginx,django-views,nginx-location,Python,Django,Nginx,Django Views,Nginx Location,我需要一个由Django呈现的页面上的受保护视频文件。该文件是受保护的,但它不像我所期望的那样为html呈现的页面提供服务,比如netflix。相反,我得到的只是一堆乱七八糟的东西 我知道内部重定向是为文件服务的,因此它会这样显示,但我需要它与netflix一样在呈现页面上显示其他html。。。。我做错了什么 Nginx conf文件: 网址: 视图: 模板,但它不呈现html,仅呈现上面的图像: 您正在组合两个请求/响应:呈现页面和发送视频 您需要呈现模板,在模板中为视频提供一个调用Djang

我需要一个由Django呈现的页面上的受保护视频文件。该文件是受保护的,但它不像我所期望的那样为html呈现的页面提供服务,比如netflix。相反,我得到的只是一堆乱七八糟的东西

我知道内部重定向是为文件服务的,因此它会这样显示,但我需要它与netflix一样在呈现页面上显示其他html。。。。我做错了什么

Nginx conf文件:

网址:

视图:

模板,但它不呈现html,仅呈现上面的图像:


您正在组合两个请求/响应:呈现页面和发送视频

您需要呈现模板,在模板中为视频提供一个调用Django视图的URL。然后,第二个视图返回一个带有秘密URL的响应作为accel重定向。因此:

path('protected_video/', views.protected_video, name='protected_video'),
path('video_url/<slug: video_slug>/', views.redirect_to_video, name='redirect_to_video'),

...
def protected_video(request):
    ....
    if request.method =='POST':
        if some_var == 'the_correct_value':
            protected_uri = reverse('redirect_to_video' , kwargs={'video_slug': 'some_slug'})
            return render(request, 'template.html', {'some_var ': True, 'protected_uri': protected_uri})

def redirect_to_video(request, slug):
    ... some logic to get the secret URL from the slug ...
    response = HttpResponse()
    response['X-Accel-Redirect'] = secret_url
    return response

糟糕!ᕙ༼ຈل͜ຈ༽ᕗ 谢谢
path('protected_video/', views.protected_video, name='protected_video'),
def protected_video(request):
    ....
    if request.method =='POST':
        if some_var == 'the_correct_value':
            protected_uri = '/secret_videos/secret-vid-1.mp4'
            response = render(request, 'template.html', {'some_var ': True, 'protected_uri': protected_uri})
            response['X-Accel-Redirect'] = protected_uri
            return response
    return render(request, 'template.html', {})
<video width="75%" height="auto" controls>
    <source src="{{ protected_uri }}" type="video/mp4" />
    Your browser doesn't support the mp4 video format.
</video>
path('protected_video/', views.protected_video, name='protected_video'),
path('video_url/<slug: video_slug>/', views.redirect_to_video, name='redirect_to_video'),

...
def protected_video(request):
    ....
    if request.method =='POST':
        if some_var == 'the_correct_value':
            protected_uri = reverse('redirect_to_video' , kwargs={'video_slug': 'some_slug'})
            return render(request, 'template.html', {'some_var ': True, 'protected_uri': protected_uri})

def redirect_to_video(request, slug):
    ... some logic to get the secret URL from the slug ...
    response = HttpResponse()
    response['X-Accel-Redirect'] = secret_url
    return response