2016-10-17 7 views
-1

Ich habe ein eigenes User-Modell in django erstellt:Wo wird das Bild hochgeladen?

class CustomUser(AbstractBaseUser, PermissionsMixin): 
    email = models.EmailField(_('email address'), max_length=254, unique=True) 
    first_name = models.CharField(_('first name'), max_length=30) 
    image = models.ImageField(_('profile image'), upload_to='userimages/', default = 'user_default.jpeg') 

Jetzt habe ich einen Serializer für django-Rest-Rahmen erstellt einen neuen Benutzer registrieren:

class UserRegistrationSerializer(serializers.ModelSerializer): 
    password = serializers.CharField(style={'input_type': 'password'}, 
            write_only=True, 
            validators=settings.get('PASSWORD_VALIDATORS')) 
    image = serializers.ImageField(max_length=None, use_url=True) 
    class Meta: 
     model = User 
     fields = tuple(User.REQUIRED_FIELDS) + (
      User.USERNAME_FIELD, 
      User._meta.pk.name, 
      'image', 
      'password', 
     ) 

    def create(self, validated_data): 
     if settings.get('SEND_ACTIVATION_EMAIL'): 
      with transaction.atomic(): 
       user = User.objects.create_user(**validated_data) 
       user.is_active = False 
       user.save(update_fields=['is_active']) 
     else: 
      user = User.objects.create_user(**validated_data) 
     return user 

Meine Medien Einstellungen sind:

import os 

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
MEDIA_URL = '/media/' 

Mein 'urls.py':

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^', include('app.urls')), 
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

Jetzt, wenn ich 'POST' auf dem/register/Endpunkt, der Benutzer wird erstellt und ich bin in der Lage, das Bild im Browser von der URL im Admin-Panel zu sehen. Aber wenn ich in mein Projektverzeichnis schaue, ist das Bild einfach nicht da. Ich bin nicht in der Lage, den Bildstandort herauszufinden. Ich bin mir ziemlich sicher, dass das Bild auf meinem Computer hochgeladen wird, als ich versuchte, es von einem anderen Gerät im LAN hochzuladen, und nach dem Trennen von dem anderen Computer (über den Browser) darauf zugreifen konnte.

Bitte helfen.

+0

Was ist BASE_DIR? – spectras

Antwort

1

Wenn das, was Sie wollen, ist nur Ihre Ordner Standort kennen, können Sie den folgenden Befehl ein (In ausführen können Linux-basierte Systeme):

sudo find/-name userimages 
+0

Nachdem ich das ausgeführt habe, habe ich festgestellt, dass das Medium unter/media/userimages/erstellt wurde. Jetzt ist die Sache, ich verstehe dieses Verhalten nicht. – toothie

+0

Sie meinen, dass Sie '/ media/media/userimages /' haben? – ettanany

+0

Just/media/userimages/ – toothie

0

Sie haben Recht, dass vom Benutzer hochgeladene Dateien in MEDIA_ROOT gespeichert werden sollen.

Sie diese Position durch Anheizen der Django-Shell und die Überprüfung auf Einstellung überprüfen:

$ python manage.py shell 
>>> from django.conf import settings 
>>> settings.MEDIA_ROOT 
<< snip: the media root location >> 
+0

zeigt es '/ media /' – toothie

+0

es sollte der Verzeichnispfad sein. Aber es ist nicht, ich frage mich warum. – toothie

+0

Wenn ich den Pfad zum Medienordner fest codierte, wird er in den Ordner hochgeladen. – toothie

Verwandte Themen