save file from form django upload file from form django
Subscribe to our YouTube Aqueduct!
[Jul 12, 2021] New Video: How to Use Django Residue Framework Permissions (DRF Tutorial - Office 7)
tutorial
How to Upload Files With Django
Updated at Nov two, 2018: As suggested by @fapolloner, I've removed the manual file handling. Updated the example using FileSystemStorage instead. Thanks!
In this tutorial you will learn the concepts behind Django file upload and how to handle file upload using model forms. In the end of this post yous will notice the source code of the examples I used so you can try and explore.
This tutorial is also bachelor in video format:
The Nuts of File Upload With Django
When files are submitted to the server, the file data ends upward placed in asking.FILES
.
It is mandatory for the HTML form to take the attribute enctype="multipart/form-information"
set correctly. Otherwise the request.FILES
will be empty.
The course must be submitted using the POST method.
Django take proper model fields to handle uploaded files: FileField
and ImageField
.
The files uploaded to FileField
or ImageField
are not stored in the database merely in the filesystem.
FileField
and ImageField
are created as a cord field in the database (usually VARCHAR), containing the reference to the actual file.
If you delete a model instance containing FileField
or ImageField
, Django will not delete the physical file, merely only the reference to the file.
The request.FILES
is a dictionary-like object. Each primal in request.FILES
is the name from the <input type="file" name="" />
.
Each value in request.FILES
is an UploadedFile
example.
You will need to gear up MEDIA_URL
and MEDIA_ROOT
in your projection's settings.py.
MEDIA_URL = '/media/' MEDIA_ROOT = bone . path . join ( BASE_DIR , 'media' )
In the development server yous may serve the user uploaded files (media) using django.contrib.staticfiles.views.serve() view.
from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # Project url patterns... ] if settings . DEBUG : urlpatterns += static ( settings . MEDIA_URL , document_root = settings . MEDIA_ROOT )
To access the MEDIA_URL
in template you must add together django.template.context_processors.media
to your context_processeors
inside the TEMPLATES
config.
Simple File Upload
Post-obit is a minimal file upload case using FileSystemStorage
. Use it merely to larn nearly the period of the process.
simple_upload.html
{% extends 'base of operations.html' %} {% load static %} {% cake content %} <form method= "post" enctype= "multipart/class-data" > {% csrf_token %} <input type= "file" proper name= "myfile" > <button blazon= "submit" >Upload</button> </form> {% if uploaded_file_url %} <p>File uploaded at: <a href= "{{ uploaded_file_url }}" >{{ uploaded_file_url }}</a></p> {% endif %} <p><a href= "{% url 'domicile' %}" >Return to home</a></p> {% endblock %}
views.py
from django.shortcuts import return from django.conf import settings from django.core.files.storage import FileSystemStorage def simple_upload ( request ): if request . method == 'POST' and request . FILES [ 'myfile' ]: myfile = request . FILES [ 'myfile' ] fs = FileSystemStorage () filename = fs . save ( myfile . proper name , myfile ) uploaded_file_url = fs . url ( filename ) return render ( asking , 'core/simple_upload.html' , { 'uploaded_file_url' : uploaded_file_url }) render render ( request , 'core/simple_upload.html' )
File Upload With Model Forms
Now, this is a way more user-friendly way. Model forms perform validation, automatically builds the absolute path for the upload, treats filename conflicts and other mutual tasks.
models.py
from django.db import models class Document ( models . Model ): description = models . CharField ( max_length = 255 , blank = True ) certificate = models . FileField ( upload_to = 'documents/' ) uploaded_at = models . DateTimeField ( auto_now_add = True )
forms.py
from django import forms from uploads.core.models import Document grade DocumentForm ( forms . ModelForm ): form Meta : model = Document fields = ( 'description' , 'certificate' , )
views.py
def model_form_upload ( request ): if asking . method == 'Mail service' : form = DocumentForm ( request . Mail , request . FILES ) if course . is_valid (): form . save () return redirect ( 'home' ) else : course = DocumentForm () return return ( request , 'core/model_form_upload.html' , { 'form' : course })
model_form_upload.html
{% extends 'base.html' %} {% cake content %} <form method= "mail service" enctype= "multipart/course-data" > {% csrf_token %} {{ form.as_p }} <push button blazon= "submit" >Upload</button> </form> <p><a href= "{% url 'home' %}" >Render to domicile</a></p> {% endblock %}
Well-nigh the FileField upload_to Parameter
See the example below:
certificate = models . FileField ( upload_to = 'documents/' )
Note the upload_to
parameter. The files will be automatically uploaded to MEDIA_ROOT/documents/
.
It is also possible to do something like:
document = models . FileField ( upload_to = 'documents/ % Y/ % g/ % d/' )
A file uploaded today would be uploaded to MEDIA_ROOT/documents/2016/08/01/
.
The upload_to
can as well exist a callable that returns a string. This callable accepts two parameters, case and filename.
def user_directory_path ( instance , filename ): # file will exist uploaded to MEDIA_ROOT/user_<id>/<filename> return 'user_{0}/{i}' . format ( case . user . id , filename ) course MyModel ( models . Model ): upload = models . FileField ( upload_to = user_directory_path )
Download the Examples
The lawmaking used in this postal service is available on Github.
git clone https://github.com/sibtc/uncomplicated-file-upload.git
pip install django
python manage.py drift
python manage.py runserver
Popular Posts
bakerwitswoompose.blogspot.com
Source: https://simpleisbetterthancomplex.com/tutorial/2016/08/01/how-to-upload-files-with-django.html
0 Response to "save file from form django upload file from form django"
Post a Comment