mirror of
https://github.com/cookiecutter/cookiecutter-django.git
synced 2025-08-08 05:54:53 +03:00
Merge branch 'cookiecutter:master' into main
This commit is contained in:
commit
0f674bf7eb
2
.github/contributors.json
vendored
2
.github/contributors.json
vendored
|
@ -1115,7 +1115,7 @@
|
||||||
"twitter_username": "Qoyyuum"
|
"twitter_username": "Qoyyuum"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mfosterw",
|
"name": "Matthew Foster Walsh",
|
||||||
"github_login": "mfosterw",
|
"github_login": "mfosterw",
|
||||||
"twitter_username": ""
|
"twitter_username": ""
|
||||||
},
|
},
|
||||||
|
|
|
@ -26,7 +26,7 @@ repos:
|
||||||
args: ["--tab-width", "2"]
|
args: ["--tab-width", "2"]
|
||||||
|
|
||||||
- repo: https://github.com/asottile/pyupgrade
|
- repo: https://github.com/asottile/pyupgrade
|
||||||
rev: v3.15.0
|
rev: v3.15.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: pyupgrade
|
- id: pyupgrade
|
||||||
args: [--py311-plus]
|
args: [--py311-plus]
|
||||||
|
|
17
CHANGELOG.md
17
CHANGELOG.md
|
@ -3,6 +3,23 @@ All enhancements and patches to Cookiecutter Django will be documented in this f
|
||||||
|
|
||||||
<!-- GENERATOR_PLACEHOLDER -->
|
<!-- GENERATOR_PLACEHOLDER -->
|
||||||
|
|
||||||
|
## 2024.02.21
|
||||||
|
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Switch to `celery.shared_task` to define tasks ([#4881](https://github.com/cookiecutter/cookiecutter-django/pull/4881))
|
||||||
|
|
||||||
|
- Replace usages of `get_user_model` by importing model directly ([#4879](https://github.com/cookiecutter/cookiecutter-django/pull/4879))
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
|
||||||
|
- Auto-update pre-commit hooks ([#4873](https://github.com/cookiecutter/cookiecutter-django/pull/4873))
|
||||||
|
|
||||||
|
- Update pre-commit to 3.6.2 ([#4874](https://github.com/cookiecutter/cookiecutter-django/pull/4874))
|
||||||
|
|
||||||
|
- Update ruff to 0.2.2 ([#4871](https://github.com/cookiecutter/cookiecutter-django/pull/4871))
|
||||||
|
|
||||||
## 2024.02.19
|
## 2024.02.19
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1454,6 +1454,13 @@ Listed in alphabetical order.
|
||||||
</td>
|
</td>
|
||||||
<td></td>
|
<td></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Matthew Foster Walsh</td>
|
||||||
|
<td>
|
||||||
|
<a href="https://github.com/mfosterw">mfosterw</a>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Matthew Sisley</td>
|
<td>Matthew Sisley</td>
|
||||||
<td>
|
<td>
|
||||||
|
@ -1489,13 +1496,6 @@ Listed in alphabetical order.
|
||||||
</td>
|
</td>
|
||||||
<td></td>
|
<td></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<td>mfosterw</td>
|
|
||||||
<td>
|
|
||||||
<a href="https://github.com/mfosterw">mfosterw</a>
|
|
||||||
</td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>Michael Gecht</td>
|
<td>Michael Gecht</td>
|
||||||
<td>
|
<td>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
cookiecutter==2.5.0
|
cookiecutter==2.6.0
|
||||||
sh==2.0.6; sys_platform != "win32"
|
sh==2.0.6; sys_platform != "win32"
|
||||||
binaryornot==0.4.4
|
binaryornot==0.4.4
|
||||||
|
|
||||||
# Code quality
|
# Code quality
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
ruff==0.2.1
|
ruff==0.2.2
|
||||||
django-upgrade==1.16.0
|
django-upgrade==1.16.0
|
||||||
djlint==1.34.1
|
djlint==1.34.1
|
||||||
pre-commit==3.6.1
|
pre-commit==3.6.2
|
||||||
|
|
||||||
# Testing
|
# Testing
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -5,7 +5,7 @@ except ImportError:
|
||||||
from distutils.core import setup
|
from distutils.core import setup
|
||||||
|
|
||||||
# We use calendar versioning
|
# We use calendar versioning
|
||||||
version = "2024.02.19"
|
version = "2024.02.21"
|
||||||
|
|
||||||
with open("README.md") as readme_file:
|
with open("README.md") as readme_file:
|
||||||
long_description = readme_file.read()
|
long_description = readme_file.read()
|
||||||
|
|
|
@ -35,7 +35,7 @@ repos:
|
||||||
|
|
||||||
# Run the Ruff linter.
|
# Run the Ruff linter.
|
||||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||||
rev: v0.2.1
|
rev: v0.2.2
|
||||||
hooks:
|
hooks:
|
||||||
# Linter
|
# Linter
|
||||||
- id: ruff
|
- id: ruff
|
||||||
|
|
|
@ -28,10 +28,10 @@ sphinx-autobuild==2024.2.4 # https://github.com/GaretJax/sphinx-autobuild
|
||||||
|
|
||||||
# Code quality
|
# Code quality
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
ruff==0.2.1 # https://github.com/astral-sh/ruff
|
ruff==0.2.2 # https://github.com/astral-sh/ruff
|
||||||
coverage==7.4.1 # https://github.com/nedbat/coveragepy
|
coverage==7.4.1 # https://github.com/nedbat/coveragepy
|
||||||
djlint==1.34.1 # https://github.com/Riverside-Healthcare/djLint
|
djlint==1.34.1 # https://github.com/Riverside-Healthcare/djLint
|
||||||
pre-commit==3.6.1 # https://github.com/pre-commit/pre-commit
|
pre-commit==3.6.2 # https://github.com/pre-commit/pre-commit
|
||||||
|
|
||||||
# Django
|
# Django
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
|
@ -1,19 +1,17 @@
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.auth import admin as auth_admin
|
from django.contrib.auth import admin as auth_admin
|
||||||
from django.contrib.auth import decorators
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from {{ cookiecutter.project_slug }}.users.forms import UserAdminChangeForm
|
from {{ cookiecutter.project_slug }}.users.forms import UserAdminChangeForm
|
||||||
from {{ cookiecutter.project_slug }}.users.forms import UserAdminCreationForm
|
from {{ cookiecutter.project_slug }}.users.forms import UserAdminCreationForm
|
||||||
|
from {{ cookiecutter.project_slug }}.users.models import User
|
||||||
User = get_user_model()
|
|
||||||
|
|
||||||
if settings.DJANGO_ADMIN_FORCE_ALLAUTH:
|
if settings.DJANGO_ADMIN_FORCE_ALLAUTH:
|
||||||
# Force the `admin` sign in process to go through the `django-allauth` workflow:
|
# Force the `admin` sign in process to go through the `django-allauth` workflow:
|
||||||
# https://docs.allauth.org/en/latest/common/admin.html#admin
|
# https://docs.allauth.org/en/latest/common/admin.html#admin
|
||||||
admin.site.login = decorators.login_required(admin.site.login) # type: ignore[method-assign]
|
admin.site.login = login_required(admin.site.login) # type: ignore[method-assign]
|
||||||
|
|
||||||
|
|
||||||
@admin.register(User)
|
@admin.register(User)
|
||||||
|
|
|
@ -1,12 +1,9 @@
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from {{ cookiecutter.project_slug }}.users.models import User as UserType
|
from {{ cookiecutter.project_slug }}.users.models import User
|
||||||
|
|
||||||
User = get_user_model()
|
|
||||||
|
|
||||||
|
|
||||||
class UserSerializer(serializers.ModelSerializer[UserType]):
|
class UserSerializer(serializers.ModelSerializer[User]):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
{%- if cookiecutter.username_type == "email" %}
|
{%- if cookiecutter.username_type == "email" %}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.mixins import ListModelMixin
|
from rest_framework.mixins import ListModelMixin
|
||||||
|
@ -7,9 +6,9 @@ from rest_framework.mixins import UpdateModelMixin
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.viewsets import GenericViewSet
|
from rest_framework.viewsets import GenericViewSet
|
||||||
|
|
||||||
from .serializers import UserSerializer
|
from {{ cookiecutter.project_slug }}.users.models import User
|
||||||
|
|
||||||
User = get_user_model()
|
from .serializers import UserSerializer
|
||||||
|
|
||||||
|
|
||||||
class UserViewSet(RetrieveModelMixin, ListModelMixin, UpdateModelMixin, GenericViewSet):
|
class UserViewSet(RetrieveModelMixin, ListModelMixin, UpdateModelMixin, GenericViewSet):
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
from allauth.account.forms import SignupForm
|
from allauth.account.forms import SignupForm
|
||||||
from allauth.socialaccount.forms import SignupForm as SocialSignupForm
|
from allauth.socialaccount.forms import SignupForm as SocialSignupForm
|
||||||
from django.contrib.auth import forms as admin_forms
|
from django.contrib.auth import forms as admin_forms
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
{%- if cookiecutter.username_type == "email" %}
|
{%- if cookiecutter.username_type == "email" %}
|
||||||
from django.forms import EmailField
|
from django.forms import EmailField
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
User = get_user_model()
|
from {{ cookiecutter.project_slug }}.users.models import User
|
||||||
|
|
||||||
|
|
||||||
class UserAdminChangeForm(admin_forms.UserChangeForm):
|
class UserAdminChangeForm(admin_forms.UserChangeForm):
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
from django.contrib.auth import get_user_model
|
from celery import shared_task
|
||||||
|
|
||||||
from config import celery_app
|
from {{ cookiecutter.project_slug }}.users.models import User
|
||||||
|
|
||||||
User = get_user_model()
|
|
||||||
|
|
||||||
|
|
||||||
@celery_app.task()
|
@shared_task()
|
||||||
def get_users_count():
|
def get_users_count():
|
||||||
"""A pointless Celery task to demonstrate usage."""
|
"""A pointless Celery task to demonstrate usage."""
|
||||||
return User.objects.count()
|
return User.objects.count()
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
from collections.abc import Sequence
|
from collections.abc import Sequence
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from factory import Faker
|
from factory import Faker
|
||||||
from factory import post_generation
|
from factory import post_generation
|
||||||
from factory.django import DjangoModelFactory
|
from factory.django import DjangoModelFactory
|
||||||
|
|
||||||
|
from {{ cookiecutter.project_slug }}.users.models import User
|
||||||
|
|
||||||
|
|
||||||
class UserFactory(DjangoModelFactory):
|
class UserFactory(DjangoModelFactory):
|
||||||
{%- if cookiecutter.username_type == "username" %}
|
{%- if cookiecutter.username_type == "username" %}
|
||||||
|
@ -38,5 +39,5 @@ class UserFactory(DjangoModelFactory):
|
||||||
instance.save()
|
instance.save()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = get_user_model()
|
model = User
|
||||||
django_get_or_create = ["{{cookiecutter.username_type}}"]
|
django_get_or_create = ["{{cookiecutter.username_type}}"]
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
@ -7,7 +6,7 @@ from django.views.generic import DetailView
|
||||||
from django.views.generic import RedirectView
|
from django.views.generic import RedirectView
|
||||||
from django.views.generic import UpdateView
|
from django.views.generic import UpdateView
|
||||||
|
|
||||||
User = get_user_model()
|
from {{ cookiecutter.project_slug }}.users.models import User
|
||||||
|
|
||||||
|
|
||||||
class UserDetailView(LoginRequiredMixin, DetailView):
|
class UserDetailView(LoginRequiredMixin, DetailView):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user