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)


How to Upload Files With Django

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              


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

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel