Django: Valider le type de fichier du fichier téléchargé

J'ai une application qui permet aux gens de télécharger des fichiers, représenté comme UploadedFiles. Cependant, je tiens à vous assurer que les utilisateurs d'uploader des fichiers xml. Je sais que je peux le faire à l'aide de magic, mais je ne sais pas où mettre cette check - je ne peux pas le mettre dans le clean fonction depuis le fichier n'est pas encore téléchargé lorsque clean pistes, autant que je peux dire.

Voici la UploadedFile modèle:

class UploadedFile(models.Model):
    """This represents a file that has been uploaded to the server."""
    STATE_UPLOADED = 0
    STATE_ANNOTATED = 1
    STATE_PROCESSING = 2
    STATE_PROCESSED = 4
    STATES = (
        (STATE_UPLOADED, "Uploaded"),
        (STATE_ANNOTATED, "Annotated"),
        (STATE_PROCESSING, "Processing"),
        (STATE_PROCESSED, "Processed"),
    )

    status = models.SmallIntegerField(choices=STATES,
        default=0, blank=True, null=True) 
    file = models.FileField(upload_to=settings.XML_ROOT)
    project = models.ForeignKey(Project)

    def __unicode__(self):
        return self.file.name

    def name(self):
        return os.path.basename(self.file.name)

    def save(self, *args, **kwargs):
        if not self.status:
            self.status = self.STATE_UPLOADED
        super(UploadedFile, self).save(*args, **kwargs)

    def delete(self, *args, **kwargs):
        os.remove(self.file.path)
        self.file.delete(False)
        super(UploadedFile, self).delete(*args, **kwargs)

    def get_absolute_url(self):
        return u'/upload/projects/%d' % self.id

    def clean(self):
        if not "XML" in magic.from_file(self.file.url):
            raise ValidationError(u'Not an xml file.')

class UploadedFileForm(forms.ModelForm):
    class Meta:                
        model = UploadedFile
        exclude = ('project',)
stackoverflow.com/questions/6460848/...
Mais il est hautement inefficace - je pourrais le titre d'un fichier tout ce que je veux.
Droite, ce que vérifie l'extension, mais vous pouvez l'utiliser comme base pour valider le fichier, telles que l'ouverture et la vérification de la validité de l'xml.
Le fichier est téléchargé lorsque clean fonctionne?
Jetez un oeil à Mikkos réponse et la façon dont il gère les formes nettoyé (post) de données qui contient le téléchargement de la filedata.

OriginalL'auteur Plasma | 2013-11-28