Skip to main content

django-currentuser

Quickstart

Install django-currentuser:

pip install django-currentuser

Note: if there is a new Django version released that the library hasn’t been upgraded to support yet, e.g.:

The conflict is caused by:

The user requested django==5.1 django-currentuser 0.8.0 depends on Django<5.1 and >=4.2

you can try to install it with the unsupported/untested Django version by using the DJANGO_CURRENTUSER_USE_UNSUPPORTED_DJANGO environment variable

DJANGO_CURRENTUSER_USE_UNSUPPORTED_DJANGO=1 pip install django-currentuser

Ade it to the middleware classes in your settings.py:

MIDDLEWARE = (
    ...,
    'django_currentuser.middleware.ThreadLocalUserMiddleware',
)

Then use it in a project:

from django_currentuser.middleware import (
    get_current_user, get_current_authenticated_user)

# As model field:
from django_currentuser.db.models import CurrentUserField
class Foo(models.Model):
    created_by = CurrentUserField()
    updated_by = CurrentUserField(on_update=True)

Differences to django-cuser

Both libraries serve the same purpose, but be aware of these differences (as of django-cuser v.2017.3.16):

  • django-currentuser’s CurrentUserField stores the reference to the request user at initialization of the model instance and still allows you to overwrite the value before saving. django-cuser sets the value in the pre_save handler of the field just before writing it to the database. Intermediate changes will be ignored.

  • django-cuser deletes the user reference from the thread after finishing a response and it will therefore no longer be available for testing purposes.

Supported Versions

Note on [semver](https://semver.org/): While the fact that Django support stopped for version X, doesn’t have to mean it’s a breaking change for this lib, as it would be just a backward-compatible metadata patch, no code change. However, at some point support needs to be dropped - so for simplicity, the project follows what Django supports. If someone needs to use different, unsupported version, DJANGO_CURRENTUSER_USE_UNSUPPORTED_DJANGO allows for it.

Release Notes

  • 0.10.0

    • by @adiorz

    • add support for Python 3.14

    • add support for Django 6.0

    • drop support for Python 3.9

    • drop support for Django 5.1

  • 0.9.0

    • by @bartvanandel

    • add support for Python 3.13

    • add support for Django 5.2

    • drop support for Python 3.8

    • drop support for Django 5.0

  • 0.8.0

    • add support for Django 5.1

    • drop support for Django 3.2

    • introduce DJANGO_CURRENTUSER_USE_UNSUPPORTED_DJANGO environment variable to make upgrades easier

  • 0.7.0

    • add support for Django 5.0

    • add support for Python 3.12

    • drop support for Django 4.0 and 4.1

  • 0.6.1

    • remove project transfer warning from README in order not to scare people away from the project

  • 0.6.0

    • add support for Django 4.0, 4.1, and 4.2

    • add support for Python 3.11

    • drop support for Python 3.6 and 3.7

  • 0.5.3 - add support for Django 3.2 and Python 3.9

  • 0.5.2 - Fixed Django deprecation warning about using ugettext_lazy()

  • 0.5.1 - add support for Django 3.1 and Python 3.8

  • 0.5.0 - add support for update on save (thank you @felubra) - no longer build on Python 3.5, deprecated

  • 0.4.3 - add support for Django 3.0

  • 0.4.2 - Minor fix for supported Django and Python versions

  • 0.4.0 - update supported versions

    • drop support for Python 3.4

    • drop support for Django 2.0

    • add support for Python 3.7

    • add support for Django 2.2

    • update tox3travis.py to not loose deployment feature

  • 0.3.4 - Use public Travis for packaging to remove dependency on outdated build system

  • 0.3.3 - drop Python 3.7 support due to build process problems

  • 0.3.1 - attempt to add Python 3.7 support

  • 0.3.0 - update supported versions according to https://www.djangoproject.com/download/#supported-versions and https://devguide.python.org/#status-of-python-branches

    • drop support for Python 3.2

  • 0.2.3 - support custom user model, drop Django 1.10 support

  • 0.2.2 - support Django 2.0

  • 0.2.1 - version fixes #9

    • support Django 1.11.x and not just 1.11.0

  • 0.2.0 - New middleclass format

    • Adapt to new object based middle class format of Django 1.10+

    • Drop support for deprecated Django versions 1.8 and 1.9

  • 0.1.1 - minor release

    • suppress warning for passed kwargs as long as they match the defaults (avoids them being printed during running tests when fields are cloned)

  • 0.1.0 - initial release

    • provides middleware + methods to set + retrieve reference of currently logged in user from thread

    • provides CurrentUserField that by default stores the currently logged in user

    • supports Django 1.10, 1.11 on python 2.7, 3.4, 3.5, and 3.6 - as per the official django docs

Contributing

As an open source project, we welcome contributions.

The code lives on github.

Reporting issues/improvements

Please open an issue on github or provide a pull request whether for code or for the documentation.

For non-trivial changes, we kindly ask you to open an issue, as it might be rejected. However, if the diff of a pull request better illustrates the point, feel free to make it a pull request anyway.

Pull Requests

  • for code changes

    • it must have tests covering the change. You might be asked to cover missing scenarios

    • the latest flake8 will be run and shouldn’t produce any warning

    • if the change is significant enough, documentation has to be provided

To trigger the packaging, run make release on the master branch with a changed version number.

Setting up all Python versions

sudo apt-get -y install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
for version in 3.10 3.11 3.12 3.13 3.14; do
  py=python$version
  if ! which ${py}; then
    sudo apt-get -y install ${py} ${py}-dev
  fi
done
sudo add-apt-repository --remove ppa:deadsnakes/ppa
sudo apt-get update

Code of Conduct

As it is a Django extension, it follows Django’s own Code of Conduct. As there is no mailing list yet, please use github issues

Contributors

Current maintainer: @zsoldosp Initial development & maintenance: @PaesslerAG

For contributors, see github contributors.

Metadata

Release files for django-currentuser 0.10.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-currentuser 0.10.0
File Size Uploaded Provenance
django_currentuser-0.10.0.tar.gz 13.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for django-currentuser 0.10.0
File Interpreter ABI Platform
django_currentuser-0.10.0-py3-none-any.whl Python 3 none any Details

Total release size: 21.6 kB

Release files / django_currentuser-0.10.0.tar.gz

Download URL django_currentuser-0.10.0.tar.gz
Size 13.8 kB
Tags Source
SHA-256 checksum
How to use checksums
32f052f87a6457f9e09dbfb1baa6d71800fec44f5f08dec4476c3af8dbd7cba7
BLAKE2b-256 checksum
How to use checksums
a77391991f1037bc75cbb5f0ca0eb9ff4dc5853f23b24f4becb456f43ef4777c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / django_currentuser-0.10.0-py3-none-any.whl

Download URL django_currentuser-0.10.0-py3-none-any.whl
Size 7.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5c325d308219c79a3a2107019139531221f63ecf452c0cf730d5c75613224866
BLAKE2b-256 checksum
How to use checksums
85201512b2c060eb6ccc849f6c281d15998036a0c6d808a31269b13f09e0f05a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Security for django-currentuser 0.10.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page