English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Subida de archivos en Django

Para aplicaciones web, para poder cargar archivos (imágenes, canciones, formato PDF, texto ...), es muy útil. En esta sección discutiremos cómo usar Django para cargar archivos.

Carga de imágenes

Antes de comenzar a desarrollar la carga de imágenes, asegúrese de que la biblioteca de imágenes de Python (PIL) ya esté instalada. Ahora hablemos de la carga de imágenes, creemos un archivo de configuración de formato en myapp/forms.py -

# Nombre de archivo : example.py
# Derechos de autor : 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha : 2020-08-08
#-*- coding: utf-8 -*-
 from django import forms
 class ProfileForm(forms.Form):
    name = forms.CharField(max_length = 100)
    picture = forms.ImageFields()

正如你所看到的,这里的主要区别仅仅是 forms.ImageField。ImageField字段将确保上传的文件是一个图像。如果不是,格式验证将失败。

现在,让我们创建一个 "Profile" 模型,以保存上传的资料。在 myapp/models.py -

# Nombre de archivo : example.py
# Derechos de autor : 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha : 2020-08-08
from django.db import models
 class Profile(models.Model):
    name = models.CharField(max_length = 50)
    picture = models.ImageField(upload_to = 'pictures')
    class Meta:
       db_table = "profile"

正如所看到的模型,ImageField 使用强制性参数:upload_to. 这表示硬盘驱动器,图像保存所在的地方。注意,该参数将被添加到 settings.py文件中定义的MEDIA_ROOT选项。

现在我们有表单和模型,让我们来创建视图,在 myapp/ views.py -

# Nombre de archivo : example.py
# Derechos de autor : 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha : 2020-08-08
#-*- coding: utf-8 -*-
 from myapp.forms import ProfileForm
 from myapp.models import Profile
 def SaveProfile(request):
    saved = False
    if request.method == "POST":
       #Get the posted form
       MyProfileForm = ProfileForm(request.POST, request.FILES)
       if MyProfileForm.is_valid():
          profile = Profile()
          profile.name = MyProfileForm.cleaned_data["name"]
          
          
          
    
       
 
    

myapp//

# Nombre de archivo : example.py
# Derechos de autor : 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha : 2020-08-08

    
       
          /strong>
       
       
          /strong>
       
    </body>
 </html>

myapp//

# Nombre de archivo : example.py
# Derechos de autor : 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha : 2020-08-08

    
       /- 
          acción="{% url "myapp.views.SaveProfile" %}" método="POST"
          <div style="máximo-ancho:470px;">
             <centrar> 
                <input type="texto" style="márgen-izquierda:20%;" 
                indicador_de_entrada="Nombre" nombre="nombre" />
             </center>
          </div>
 
          <salto_de_linea>
          <div style="máximo-ancho:470px;">
             <centrar> 
                <input type="archivo" style="márgen-izquierda:20%;" 
                   indicador_de_entrada="Imagen" nombre="imagen" />
             </center>
          </div>
 
          <salto_de_linea>
          <div style="máximo-ancho:470px;">
             <centrar> 
                <button style="borde:0px;fondo:-color:#4285F4; márgen-arriba:8%; 
                   alto:35px; ancho:80%; márgen-izquierda:19%;"type"="submit" value="Login">
                   <strong>Login</strong>
                </button>
             </center>
          </div>
       </form>
    </body>
 </html>

A continuación, necesitamos emparejar las URL para comenzar: myapp/urls.py

# Nombre de archivo : example.py
# Derechos de autor : 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha : 2020-08-08
from django.conf.urls import patterns, url
 from django.views.generic import TemplateView
 urlpatterns = patterns(),
    'myapp.views', url(r'^profile',/', TemplateView.as_view(),
       template_name = 'profile.htmll', url(r'^guardado',/', 'GuardarProfile', name = 'guardado')
 )

Cuando se accede a"/myapp/profile",obtendremos el siguiente template profile.htmll mostrado -

Después de enviar el formato, el template guardado se mostrará como sigue -

Aquí solo explicamos el ejemplo de subida de imágenes, pero si desea subir otros tipos de archivos, simplemente reemplace ImageField en estos dos modelos y el campo de formulario FileField.