Ich frage mich, ob es eine Möglichkeit gibt, ein Bild oder eine Datei zu sichern, die versteckt werden soll, wenn sie nicht authentifiziert wird.Wie man eine Datei privat macht, indem man die URL sichert, die nur authentifizierte Benutzer sehen können
Angenommen, es gibt ein Bild auf meiner Website, das nur angezeigt wird, wenn dieser Benutzer authentifiziert ist. Aber die Sache ist, ich kann die URL kopieren oder das Bild in der neuen Registerkarte öffnen.
http://siteis.com/media/uploaded_files/1421499811_82_Chrysanthemum.jpg
Und wieder, auch wenn ich nicht authentifiziert bin, kann ich dieses bestimmte Bild anzeigen, indem Sie zu dieser URL gehen. Also, mein Problem ist, wie sichere ich die Dateien, so dass nur authentifizierte Benutzer sehen können?
Update:
Ansicht:
def pictures(request, user_id):
user = User.objects.get(id=user_id)
all = user.photo_set.all()
return render(request, 'pictures.html',{
'pictures': all
})
Modelle:
def get_upload_file_name(instance, filename):
return "uploaded_files/%s_%s" %(str(time()).replace('.','_'), filename)
class Photo(models.Model):
photo_privacy = models.CharField(max_length=1,choices=PRIVACY, default='F')
user = models.ForeignKey(User)
image = models.ImageField(upload_to=get_upload_file_name)
Einstellungen:
if DEBUG:
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "myproject", "static", "static-only")
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "myproject", "static", "media")
STATICFILES_DIRS = (
os.path.join(os.path.dirname(BASE_DIR), "myproject", "static", "static"),
)
Update:
Vorlage:
{% if pictures %}
{% for photo in pictures %}
<img src="/media/{{ photo.image }}" width="300" alt="{{ photo.caption }}"/>
{% endfor %}
{% else %}
<p>You have no picture</p>
{% endif %}
url:
url(r'^(?P<user_name>[\[email protected]%.]+)/photos/$', 'pictures.views.photos', name='photos'),
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Ein Weg wäre, einen Controller die URL '/ media/uploaded_files/*' zu behandeln und nach Anmeldeinformationen zu überprüfen. Wenn nicht autorisiert, geben Sie einen 404-Status zurück. – Javier
@Javier Könnten Sie sich bitte das Update ansehen und mir sagen, wie es geht? Vielen Dank. – Robin
Die URL für die Dateien sollte jetzt eine logische URL sein, nicht Teil von statisch. Und dann würde ich etwas tun, was dem @Burhan Khalid ähnlich war. – Javier