2016-07-21 14 views
0

Ich möchte eine App erstellen und dem Nutzer einige Videos anzeigen lassen, nur wenn er über Berechtigungen verfügt oder für das Video bezahlt hat. Ich benutze Django und ich möchte ngnix und gunicorn hinzufügen, um Mediendateien zu liefern. Ich bin mir nicht sicher, ob der Nutzer die URL des Videos einmal hat, wie kann ich ihn daran hindern, das Video nicht zu sehen, wenn seine Zahlung abgelaufen ist oder er keine Berechtigungen hat. Vorerst lasse ich django die Videos bedienen und überschreibe die Servermethode und wenn er keinen Zugriff auf Video habe, gebe ich 404 zurück.Kann ich Medien-Django-Mediendateien Berechtigungen hinzufügen?

+1

Anstatt eine statische Datei direkt bereitzustellen, sollten Sie Ihre Ansicht abhängig von den Berechtigungen des Benutzers dynamisch in der Ansicht anzeigen lassen. – lonewaft

+0

können Sie mir bitte ein kurzes Beispiel geben, ich habe nie Gunicorn und Nginx verwendet, ist meine erste Einstellung der Produktion. – jalanga

+0

@lonewaft wenn ich tue wie du sagst, werden die videos von nginx kommen und server von django sein, kann ich die videos suchbar machen? Weil ich jetzt nicht kann – jalanga

Antwort

2

Sie müssen die sogenannte 'X-Sendfile-Funktion' implementieren. Lassen Sie uns sagen, dass Ihre einbezahlten für Dateien /protected/ von Ort bedient werden - Sie nginx config hinzufügen müssen:

location /protected/ { 
    internal; 
    root /some/path; 
} 

dann, wenn Sie Ihre Benutzer eine Datei mycoolflix.mp4 namens dienen wollen Ihre App-Header hinzufügen muss X-Accel-Redirect: /protected/mycoolflix.mp4 und die Datei /some/path/protected/mycoolflix.mp4 wird dem Benutzer geliefert. Weitere Informationen finden Sie in der nginx-Dokumentation here und here. Das Versenden von Dateien aus Ihren Ansichten ist keine gute Idee - es macht einen Ihrer Django-Prozesse so lange beschäftigt, bis der Download abgeschlossen ist, sodass andere Anfragen nicht mehr bearbeitet werden können.