Probabilmente vuoi rilevare il tipo MIME del caricamento indipendentemente dall'estensione del file, e ciò viene spesso fatto leggendo l'intestazione del file per rilevare "numeri magici" o altri schemi di bit che indicano la vera natura di un file. Spesso i file di testo sono un caso limite, in cui non viene rilevata alcuna intestazione e i primi x byte sono ASCII o Unicode stampabili.
Anche se è un po' una tana di coniglio in cui tuffarsi, ci sono alcune librerie Python che lo faranno per te. Ad esempio:https://github.com/ahupp/python-magic funzionerà per le tue esigenze semplicemente deducendo il tipo mime in base al contenuto del file, che poi abbinerai ai tipi che desideri accettare.
Un insieme di codice di esempio in qualche modo correlato specifico per le tue esigenze può essere trovato qui:https://stackoverflow.com /a/28306825/7341881
Modifica:la soluzione di Eddie è equivalente alla funzionalità; python-magic avvolge libmagic, che è ciò a cui attinge il comando "file" nativo di Linux. Se decidi di seguire il percorso del sottoprocesso, fai molta attenzione a non creare una vulnerabilità di sicurezza disinfettando in modo improprio l'input dell'utente (ad esempio il nome del file fornito dall'utente). Ciò potrebbe portare a un attacco che garantisce l'accesso arbitrario all'ambiente di runtime del tuo server.