django-upload-to


Namedjango-upload-to JSON
Version 0.3.5 PyPI version JSON
download
home_pagehttps://github.com/valbertovc/django-upload-to
SummaryIt generates dynamically a directory path and a file name for Django FileField
upload_time2024-01-14 00:07:57
maintainer
docs_urlNone
authorValberto Carneiro
requires_python>=3.8,<4
license
keywords django file media upload
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # django-upload-to

![PyPI - License](https://img.shields.io/pypi/l/django-upload-to)
![Pypi Version](https://img.shields.io/pypi/v/django-upload-to.svg)
[![Codecov](https://codecov.io/github/valbertovc/django-upload-to/branch/main/graph/badge.svg?token=2R5S5GTS0X)](https://codecov.io/github/valbertovc/django-upload-to)
![Building](https://img.shields.io/github/actions/workflow/status/valbertovc/django-upload-to/release.yml)
![Python Versions](https://img.shields.io/pypi/pyversions/django-upload-to.svg)
![Django Versions](https://img.shields.io/pypi/frameworkversions/django/django-upload-to)

It generates dynamically a directory path and a secure file name for Django FileField.

Main options:
- Ready to use generators.
- Generate secure file name without especial characters.
- Generate file name using a uuid value.
- Dynamically generate paths from the model instance.
- Generate paths using Python datetime formats.

## Get started
Install the django-upload-to in your virtual environment
```bash
$ pip install django-upload-to
```
Import it in your models file and add it as a `upload_to` argument in the `FileField` 
```python
# my_app/models.py
from upload_to import UploadTo
from django.db import models


class MyModel(models.Model):
    attachment = models.FileField(upload_to=UploadTo("attachments"))
```
The path and file name generated will be like this:
```text
"attachments/the-file-name-uploaded.pdf"
```

## How to use the ready-to-use classes

Consider the scenario below:
```python
import upload_to
from django.db import models


class MyUser(models.Model):
    username = models.CharField(...)
    avatar = models.FileField(upload_to=<generator>)

instance = MyUser(username='user@email.com')
```
Replace the `<generator>` fragment by the generators as showed below:
#### File in root folder
```python
>>> generator = upload_to.UploadTo()
>>> generator(instance, "file.pdf")
"file.pdf"

```
#### Define a folder structure
```python
>>> generator = upload_to.UploadTo(prefix=["files", "documents"])
>>> generator(instance, "file.pdf")
"files/documents/file.pdf"
```
#### Generate a folder name using datetime formats from Python
```python
>>> generator = upload_to.UploadTo(prefix=["pictures", "%Y"])
>>> generator(instance, "file.png")
"pictures/2023/file.png"
```
#### Replace the file name by an hexadecimal uuid value
```python
# 4. replace file name by a uuid value
>>> generator = upload_to.UuidUploadTo()
>>> generator(instance, "file.pdf")
"b189dfdf25e640b2ba5c497472c20962.pdf"
```
#### Generate the folder path using the instance's attributes
```python
>>> generator = upload_to.AttrUploadTo(attrs=["username"])
>>> generator(instance, "file.pdf")
"useremailcom/file.pdf"
```
#### Generate the folder path using the app_label and the model_name from the instance's meta options
```python
>>> generator = upload_to.ModelUploadTo()
>>> generator(instance, "file.pdf")
"my_app/user/file.pdf"
```

## Customize your upload paths

```python
# my_app/models.py
import upload_to
from django.db import models


def my_upload_generator(instance, filename):
    filename = upload_to.uuid_filename(filename)
    path = upload_to.options_from_instance(instance)
    return upload_to.upload_to(path, filename)

class MyProfile(models.Model):
    user = models.OneToOneField(...)
    avatar = models.FileField(upload_to=my_upload_generator)
```

## Useful links

1. [Documentation](https://valbertovc.github.io/django-upload-to/)
2. [Changelog](https://github.com/valbertovc/django-upload-to/releases)
3. [PyPi Page](https://pypi.org/project/django-upload-to/)
            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/valbertovc/django-upload-to",
    "name": "django-upload-to",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8,<4",
    "maintainer_email": "",
    "keywords": "django,file,media,upload",
    "author": "Valberto Carneiro",
    "author_email": "valbertovc@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/5d/03/8199eed31163981529de920479e4bb1c6c71d786b1e484acd3c8ae24b4f6/django_upload_to-0.3.5.tar.gz",
    "platform": null,
    "description": "# django-upload-to\n\n![PyPI - License](https://img.shields.io/pypi/l/django-upload-to)\n![Pypi Version](https://img.shields.io/pypi/v/django-upload-to.svg)\n[![Codecov](https://codecov.io/github/valbertovc/django-upload-to/branch/main/graph/badge.svg?token=2R5S5GTS0X)](https://codecov.io/github/valbertovc/django-upload-to)\n![Building](https://img.shields.io/github/actions/workflow/status/valbertovc/django-upload-to/release.yml)\n![Python Versions](https://img.shields.io/pypi/pyversions/django-upload-to.svg)\n![Django Versions](https://img.shields.io/pypi/frameworkversions/django/django-upload-to)\n\nIt generates dynamically a directory path and a secure file name for Django FileField.\n\nMain options:\n- Ready to use generators.\n- Generate secure file name without especial characters.\n- Generate file name using a uuid value.\n- Dynamically generate paths from the model instance.\n- Generate paths using Python datetime formats.\n\n## Get started\nInstall the django-upload-to in your virtual environment\n```bash\n$ pip install django-upload-to\n```\nImport it in your models file and add it as a `upload_to` argument in the `FileField` \n```python\n# my_app/models.py\nfrom upload_to import UploadTo\nfrom django.db import models\n\n\nclass MyModel(models.Model):\n    attachment = models.FileField(upload_to=UploadTo(\"attachments\"))\n```\nThe path and file name generated will be like this:\n```text\n\"attachments/the-file-name-uploaded.pdf\"\n```\n\n## How to use the ready-to-use classes\n\nConsider the scenario below:\n```python\nimport upload_to\nfrom django.db import models\n\n\nclass MyUser(models.Model):\n    username = models.CharField(...)\n    avatar = models.FileField(upload_to=<generator>)\n\ninstance = MyUser(username='user@email.com')\n```\nReplace the `<generator>` fragment by the generators as showed below:\n#### File in root folder\n```python\n>>> generator = upload_to.UploadTo()\n>>> generator(instance, \"file.pdf\")\n\"file.pdf\"\n\n```\n#### Define a folder structure\n```python\n>>> generator = upload_to.UploadTo(prefix=[\"files\", \"documents\"])\n>>> generator(instance, \"file.pdf\")\n\"files/documents/file.pdf\"\n```\n#### Generate a folder name using datetime formats from Python\n```python\n>>> generator = upload_to.UploadTo(prefix=[\"pictures\", \"%Y\"])\n>>> generator(instance, \"file.png\")\n\"pictures/2023/file.png\"\n```\n#### Replace the file name by an hexadecimal uuid value\n```python\n# 4. replace file name by a uuid value\n>>> generator = upload_to.UuidUploadTo()\n>>> generator(instance, \"file.pdf\")\n\"b189dfdf25e640b2ba5c497472c20962.pdf\"\n```\n#### Generate the folder path using the instance's attributes\n```python\n>>> generator = upload_to.AttrUploadTo(attrs=[\"username\"])\n>>> generator(instance, \"file.pdf\")\n\"useremailcom/file.pdf\"\n```\n#### Generate the folder path using the app_label and the model_name from the instance's meta options\n```python\n>>> generator = upload_to.ModelUploadTo()\n>>> generator(instance, \"file.pdf\")\n\"my_app/user/file.pdf\"\n```\n\n## Customize your upload paths\n\n```python\n# my_app/models.py\nimport upload_to\nfrom django.db import models\n\n\ndef my_upload_generator(instance, filename):\n    filename = upload_to.uuid_filename(filename)\n    path = upload_to.options_from_instance(instance)\n    return upload_to.upload_to(path, filename)\n\nclass MyProfile(models.Model):\n    user = models.OneToOneField(...)\n    avatar = models.FileField(upload_to=my_upload_generator)\n```\n\n## Useful links\n\n1. [Documentation](https://valbertovc.github.io/django-upload-to/)\n2. [Changelog](https://github.com/valbertovc/django-upload-to/releases)\n3. [PyPi Page](https://pypi.org/project/django-upload-to/)",
    "bugtrack_url": null,
    "license": "",
    "summary": "It generates dynamically a directory path and a file name for Django FileField",
    "version": "0.3.5",
    "project_urls": {
        "Bug Tracker": "https://github.com/valbertovc/django-upload-to/issues",
        "Changelog": "https://github.com/valbertovc/django-upload-to/releases",
        "Homepage": "https://valbertovc.github.io/django-upload-to/",
        "Repository": "https://github.com/valbertovc/django-upload-to"
    },
    "split_keywords": [
        "django",
        "file",
        "media",
        "upload"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7994e34d3538fceece3e08791fc3ef519d208f1df86231e58cf6e88436594a09",
                "md5": "71f21dab41f8e5c24bd7f68bfad74e92",
                "sha256": "f9ae2774acb6eb8ce4f31370f747da98ceb17b291dcef7d2441d0b1397422a0f"
            },
            "downloads": -1,
            "filename": "django_upload_to-0.3.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "71f21dab41f8e5c24bd7f68bfad74e92",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8,<4",
            "size": 5508,
            "upload_time": "2024-01-14T00:07:56",
            "upload_time_iso_8601": "2024-01-14T00:07:56.306604Z",
            "url": "https://files.pythonhosted.org/packages/79/94/e34d3538fceece3e08791fc3ef519d208f1df86231e58cf6e88436594a09/django_upload_to-0.3.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5d038199eed31163981529de920479e4bb1c6c71d786b1e484acd3c8ae24b4f6",
                "md5": "6b1cbdc7b2e41bb988075962cfb0d4d7",
                "sha256": "201187af493b063b24ed4ddc60153becad75f0f172e22dbd0f7ceb2ada7ff37c"
            },
            "downloads": -1,
            "filename": "django_upload_to-0.3.5.tar.gz",
            "has_sig": false,
            "md5_digest": "6b1cbdc7b2e41bb988075962cfb0d4d7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8,<4",
            "size": 4501,
            "upload_time": "2024-01-14T00:07:57",
            "upload_time_iso_8601": "2024-01-14T00:07:57.914748Z",
            "url": "https://files.pythonhosted.org/packages/5d/03/8199eed31163981529de920479e4bb1c6c71d786b1e484acd3c8ae24b4f6/django_upload_to-0.3.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-01-14 00:07:57",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "valbertovc",
    "github_project": "django-upload-to",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "django-upload-to"
}
        
Elapsed time: 0.16253s