You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/upload-de-arquivos-no-django-entendo-os-modos-de-leitura.md
+4-6Lines changed: 4 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,9 +11,7 @@ Site: http://cuducos.me
11
11
Twitter: cuducos
12
12
Linkedin: cuducos
13
13
14
-
# Upload de arquivos no Django: entendo os modos de leitura
15
-
16
-
Em uma conversa com a galera do [Welcome to the Django](http://welcometothedjango.com.br) acabei experimentando e aprendendo – na prática — sobre _csv_, _strings_, _bytes_, _file object_ e a maneira como uploads funcionam. Resgistrei minha exploração e espero que mais gente possa encontrar uma ou outra coisa nova aqui!
14
+
Em uma conversa com a galera do [Welcome to the Django](http://welcometothedjango.com.br) acabei experimentando e aprendendo – na prática — sobre _csv_, _strings_, _bytes_, _file object_ e a maneira como uploads funcionam. Registrei minha exploração e espero que mais gente possa encontrar uma ou outra coisa nova aqui!
17
15
18
16
## O problema
19
17
@@ -43,12 +41,12 @@ Para explorar isso, eu precisava simular o ambiente da minha _view_. Comecei cri
43
41
```
44
42
Linha 1, foo
45
43
Linha 2, bar
46
-
Linha 3, acentação
44
+
Linha 3, acentuação
47
45
```
48
46
49
47
Depois fui ler a [documentação do `HttpRequest.FILES`](https://docs.djangoproject.com/en/1.9/ref/request-response/#django.http.HttpRequest.FILES) e descobri que os arquivos ali disponíveis são instâncias de [`UploadedFile`](https://docs.djangoproject.com/en/1.9/ref/files/uploads/#django.core.files.uploadedfile.UploadedFile).
50
48
51
-
Logo, se eu criar uma instância da classe `UploadedFile`, posso acessar um objeto do mesmo tipo que eu acessava na _view_ pelo `resques.FILES['file.csv']`. Para criar essa instância, preciso de um arquivo aberto, algo como `open(file_path, modo)`. Para continuar a simulação, eu precisava saber de que forma o Django abre o arquivo do upload quando instancia ele no `HttpRequest.FILES`.
49
+
Logo, se eu criar uma instância da classe `UploadedFile`, posso acessar um objeto do mesmo tipo que eu acessava na _view_ pelo `request.FILES['file.csv']`. Para criar essa instância, preciso de um arquivo aberto, algo como `open(file_path, modo)`. Para continuar a simulação, eu precisava saber de que forma o Django abre o arquivo do upload quando instancia ele no `HttpRequest.FILES`.
52
50
53
51
Eu desconfiava que não era em texto (`r`), que era em binário (`rb`). A documentação do [curl](https://curl.haxx.se/docs/manpage.html#-F), por exemplo, indicava que os arquivos eram enviados como binários. A documentação da [Requests](http://docs.python-requests.org/en/master/user/advanced/#streaming-uploads) tem um aviso grande, em vermelho, desencorajando qualquer um usar outro modo que não o binário.
54
52
@@ -95,7 +93,7 @@ for line in csv.reader(uploaded.file):
95
93
96
94
['Linha 1', ' foo']
97
95
['Linha 2', ' bar']
98
-
['Linha 3', ' acentação']
96
+
['Linha 3', ' acentuação']
99
97
100
98
101
99
Enfim, esse métodos `UploadedFile.close()` e `UploadedFile.open(mode=mode)` podem ser muito úteis quando queremos fazer algo diferente de gravar os arquivos recebidos em disco.
0 commit comments