mirror of
https://github.com/cookiecutter/cookiecutter-django.git
synced 2025-08-16 01:44:51 +03:00
Fix errors and lint
Signed-off-by: Andrew-Chen-Wang <acwangpython@gmail.com>
This commit is contained in:
parent
59c1c8e83a
commit
e7ed1434c9
|
@ -14,7 +14,7 @@ class UserAdmin(auth_admin.UserAdmin):
|
||||||
form = UserAdminChangeForm
|
form = UserAdminChangeForm
|
||||||
add_form = UserAdminCreationForm
|
add_form = UserAdminCreationForm
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
(None, {"fields": ("email", "password")}),
|
(None, {"fields": ("email", "password")}),
|
||||||
(_("Personal info"), {"fields": ("name",)}),
|
(_("Personal info"), {"fields": ("name",)}),
|
||||||
{%- else %}
|
{%- else %}
|
||||||
|
@ -37,3 +37,15 @@ class UserAdmin(auth_admin.UserAdmin):
|
||||||
)
|
)
|
||||||
list_display = ["{{cookiecutter.username_type}}", "name", "is_superuser"]
|
list_display = ["{{cookiecutter.username_type}}", "name", "is_superuser"]
|
||||||
search_fields = ["name"]
|
search_fields = ["name"]
|
||||||
|
{% if cookiecutter.username_type == "email" -%}
|
||||||
|
ordering = ["id"]
|
||||||
|
add_fieldsets = (
|
||||||
|
(
|
||||||
|
None,
|
||||||
|
{
|
||||||
|
"classes": ("wide",),
|
||||||
|
"fields": ("email", "password1", "password2"),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
{%- endif %}
|
||||||
|
|
|
@ -11,7 +11,7 @@ class UserSerializer(serializers.ModelSerializer):
|
||||||
fields = ["name", "url"]
|
fields = ["name", "url"]
|
||||||
|
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
"url": {"view_name": "api:user-detail", "lookup_field": "id"}
|
"url": {"view_name": "api:user-detail", "lookup_field": "pk"}
|
||||||
}
|
}
|
||||||
{%- else %}
|
{%- else %}
|
||||||
fields = ["username", "name", "url"]
|
fields = ["username", "name", "url"]
|
||||||
|
|
|
@ -14,7 +14,7 @@ class UserViewSet(RetrieveModelMixin, ListModelMixin, UpdateModelMixin, GenericV
|
||||||
serializer_class = UserSerializer
|
serializer_class = UserSerializer
|
||||||
queryset = User.objects.all()
|
queryset = User.objects.all()
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{% if cookiecutter.username_type == "email" -%}
|
||||||
lookup_field = "id"
|
lookup_field = "pk"
|
||||||
{%- else %}
|
{%- else %}
|
||||||
lookup_field = "username"
|
lookup_field = "username"
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
|
@ -2,6 +2,7 @@ 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
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.forms import EmailField
|
||||||
|
|
||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
|
|
||||||
|
@ -9,6 +10,7 @@ User = get_user_model()
|
||||||
class UserAdminChangeForm(admin_forms.UserChangeForm):
|
class UserAdminChangeForm(admin_forms.UserChangeForm):
|
||||||
class Meta(admin_forms.UserChangeForm.Meta):
|
class Meta(admin_forms.UserChangeForm.Meta):
|
||||||
model = User
|
model = User
|
||||||
|
field_classes = {"email": EmailField}
|
||||||
|
|
||||||
|
|
||||||
class UserAdminCreationForm(admin_forms.UserCreationForm):
|
class UserAdminCreationForm(admin_forms.UserCreationForm):
|
||||||
|
@ -19,6 +21,8 @@ class UserAdminCreationForm(admin_forms.UserCreationForm):
|
||||||
|
|
||||||
class Meta(admin_forms.UserCreationForm.Meta):
|
class Meta(admin_forms.UserCreationForm.Meta):
|
||||||
model = User
|
model = User
|
||||||
|
fields = ("email",)
|
||||||
|
field_classes = {"email": EmailField}
|
||||||
|
|
||||||
|
|
||||||
class UserSignupForm(SignupForm):
|
class UserSignupForm(SignupForm):
|
||||||
|
|
|
@ -42,6 +42,7 @@ class Migration(migrations.Migration):
|
||||||
verbose_name="superuser status",
|
verbose_name="superuser status",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
(
|
(
|
||||||
"username",
|
"username",
|
||||||
models.CharField(
|
models.CharField(
|
||||||
|
@ -63,6 +64,14 @@ class Migration(migrations.Migration):
|
||||||
blank=True, max_length=254, verbose_name="email address"
|
blank=True, max_length=254, verbose_name="email address"
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
{%- else %}
|
||||||
|
(
|
||||||
|
"email",
|
||||||
|
models.EmailField(
|
||||||
|
unique=True, max_length=254, verbose_name="email address"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
{%- endif %}
|
||||||
(
|
(
|
||||||
"is_staff",
|
"is_staff",
|
||||||
models.BooleanField(
|
models.BooleanField(
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
from django.contrib.auth.hashers import make_password
|
from django.contrib.auth.hashers import make_password
|
||||||
from django.contrib.auth.models import AbstractUser, UserManager as DjangoUserManager
|
from django.contrib.auth.models import AbstractUser, UserManager as DjangoUserManager
|
||||||
{%- else %}
|
{%- else %}
|
||||||
from django.contrib.auth.models import AbstractUser
|
from django.contrib.auth.models import AbstractUser
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
from django.db.models import CharField
|
from django.db.models import CharField, EmailField
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
{% if cookiecutter.username_type == "email" -%}
|
||||||
class UserManager(DjangoUserManager):
|
class UserManager(DjangoUserManager):
|
||||||
def _create_user(self, email, password, **extra_fields):
|
def _create_user(self, email, password, **extra_fields):
|
||||||
"""
|
"""
|
||||||
|
@ -38,7 +38,7 @@ class UserManager(DjangoUserManager):
|
||||||
|
|
||||||
return self._create_user(email, password, **extra_fields)
|
return self._create_user(email, password, **extra_fields)
|
||||||
|
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
class User(AbstractUser):
|
class User(AbstractUser):
|
||||||
"""
|
"""
|
||||||
|
@ -51,12 +51,16 @@ class User(AbstractUser):
|
||||||
name = CharField(_("Name of User"), blank=True, max_length=255)
|
name = CharField(_("Name of User"), blank=True, max_length=255)
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{% if cookiecutter.username_type == "email" -%}
|
||||||
username = None # type: ignore
|
username = None # type: ignore
|
||||||
|
email = EmailField(_("email address"), unique=True)
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
first_name = None # type: ignore
|
first_name = None # type: ignore
|
||||||
last_name = None # type: ignore
|
last_name = None # type: ignore
|
||||||
|
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
USERNAME_FIELD = "email"
|
USERNAME_FIELD = "email"
|
||||||
|
REQUIRED_FIELDS = []
|
||||||
|
|
||||||
|
objects = UserManager()
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
|
@ -66,7 +70,7 @@ class User(AbstractUser):
|
||||||
str: URL for user detail.
|
str: URL for user detail.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
return reverse("users:detail", kwargs={"id": self.id})
|
return reverse("users:detail", kwargs={"id": self.id})
|
||||||
{%- else %}
|
{%- else %}
|
||||||
return reverse("users:detail", kwargs={"username": self.username})
|
return reverse("users:detail", kwargs={"username": self.username})
|
||||||
|
|
|
@ -22,8 +22,8 @@ class TestUserAdmin:
|
||||||
response = admin_client.post(
|
response = admin_client.post(
|
||||||
url,
|
url,
|
||||||
data={
|
data={
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
"email": "test@test.com",
|
"email": "new-admin@example.com",
|
||||||
{%- else %}
|
{%- else %}
|
||||||
"username": "test",
|
"username": "test",
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
@ -32,14 +32,18 @@ class TestUserAdmin:
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
assert response.status_code == 302
|
assert response.status_code == 302
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
assert User.objects.filter(email="test@test.com").exists()
|
assert User.objects.filter(email="new-admin@example.com").exists()
|
||||||
{%- else %}
|
{%- else %}
|
||||||
assert User.objects.filter(username="test").exists()
|
assert User.objects.filter(username="test").exists()
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
def test_view_user(self, admin_client):
|
def test_view_user(self, admin_client):
|
||||||
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
|
user = User.objects.get(email="admin@example.com")
|
||||||
|
{%- else %}
|
||||||
user = User.objects.get(username="admin")
|
user = User.objects.get(username="admin")
|
||||||
|
{%- endif %}
|
||||||
url = reverse("admin:users_user_change", kwargs={"object_id": user.pk})
|
url = reverse("admin:users_user_change", kwargs={"object_id": user.pk})
|
||||||
response = admin_client.get(url)
|
response = admin_client.get(url)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
|
|
|
@ -25,7 +25,6 @@ class TestUserViewSet:
|
||||||
|
|
||||||
assert response.data == {
|
assert response.data == {
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{% if cookiecutter.username_type == "email" -%}
|
||||||
"email": user.email,
|
|
||||||
"url": f"http://testserver/api/users/{user.pk}/",
|
"url": f"http://testserver/api/users/{user.pk}/",
|
||||||
{%- else %}
|
{%- else %}
|
||||||
"username": user.username,
|
"username": user.username,
|
||||||
|
|
|
@ -24,7 +24,7 @@ class TestUserAdminCreationForm:
|
||||||
# hence cannot be created.
|
# hence cannot be created.
|
||||||
form = UserAdminCreationForm(
|
form = UserAdminCreationForm(
|
||||||
{
|
{
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
"email": user.email,
|
"email": user.email,
|
||||||
{%- else %}
|
{%- else %}
|
||||||
"username": user.username,
|
"username": user.username,
|
||||||
|
@ -36,7 +36,7 @@ class TestUserAdminCreationForm:
|
||||||
|
|
||||||
assert not form.is_valid()
|
assert not form.is_valid()
|
||||||
assert len(form.errors) == 1
|
assert len(form.errors) == 1
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
assert "email" in form.errors
|
assert "email" in form.errors
|
||||||
assert form.errors["email"][0] == _("This email has already been taken.")
|
assert form.errors["email"][0] == _("This email has already been taken.")
|
||||||
{%- else %}
|
{%- else %}
|
||||||
|
|
|
@ -2,7 +2,7 @@ from {{ cookiecutter.project_slug }}.users.models import User
|
||||||
|
|
||||||
|
|
||||||
def test_user_get_absolute_url(user: User):
|
def test_user_get_absolute_url(user: User):
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
assert user.get_absolute_url() == f"/users/{user.pk}/"
|
assert user.get_absolute_url() == f"/users/{user.pk}/"
|
||||||
{%- else %}
|
{%- else %}
|
||||||
assert user.get_absolute_url() == f"/users/{user.username}/"
|
assert user.get_absolute_url() == f"/users/{user.username}/"
|
||||||
|
|
|
@ -4,7 +4,7 @@ from {{ cookiecutter.project_slug }}.users.models import User
|
||||||
|
|
||||||
|
|
||||||
def test_detail(user: User):
|
def test_detail(user: User):
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
assert (
|
assert (
|
||||||
reverse("users:detail", kwargs={"pk": user.pk})
|
reverse("users:detail", kwargs={"pk": user.pk})
|
||||||
== f"/users/{user.pk}/"
|
== f"/users/{user.pk}/"
|
||||||
|
|
|
@ -39,7 +39,7 @@ class TestUserUpdateView:
|
||||||
|
|
||||||
view.request = request
|
view.request = request
|
||||||
|
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
assert view.get_success_url() == f"/users/{user.pk}/"
|
assert view.get_success_url() == f"/users/{user.pk}/"
|
||||||
{%- else %}
|
{%- else %}
|
||||||
assert view.get_success_url() == f"/users/{user.username}/"
|
assert view.get_success_url() == f"/users/{user.username}/"
|
||||||
|
@ -83,7 +83,7 @@ class TestUserRedirectView:
|
||||||
|
|
||||||
view.request = request
|
view.request = request
|
||||||
|
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
assert view.get_redirect_url() == f"/users/{user.pk}/"
|
assert view.get_redirect_url() == f"/users/{user.pk}/"
|
||||||
{%- else %}
|
{%- else %}
|
||||||
assert view.get_redirect_url() == f"/users/{user.username}/"
|
assert view.get_redirect_url() == f"/users/{user.username}/"
|
||||||
|
@ -95,7 +95,7 @@ class TestUserDetailView:
|
||||||
request = rf.get("/fake-url/")
|
request = rf.get("/fake-url/")
|
||||||
request.user = UserFactory()
|
request.user = UserFactory()
|
||||||
|
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
response = user_detail_view(request, pk=user.pk)
|
response = user_detail_view(request, pk=user.pk)
|
||||||
{%- else %}
|
{%- else %}
|
||||||
response = user_detail_view(request, username=user.username)
|
response = user_detail_view(request, username=user.username)
|
||||||
|
@ -107,7 +107,7 @@ class TestUserDetailView:
|
||||||
request = rf.get("/fake-url/")
|
request = rf.get("/fake-url/")
|
||||||
request.user = AnonymousUser()
|
request.user = AnonymousUser()
|
||||||
|
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
response = user_detail_view(request, pk=user.pk)
|
response = user_detail_view(request, pk=user.pk)
|
||||||
{%- else %}
|
{%- else %}
|
||||||
response = user_detail_view(request, username=user.username)
|
response = user_detail_view(request, username=user.username)
|
||||||
|
|
|
@ -10,8 +10,8 @@ app_name = "users"
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("~redirect/", view=user_redirect_view, name="redirect"),
|
path("~redirect/", view=user_redirect_view, name="redirect"),
|
||||||
path("~update/", view=user_update_view, name="update"),
|
path("~update/", view=user_update_view, name="update"),
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
path("<int:id>/", view=user_detail_view, name="detail"),
|
path("<int:pk>/", view=user_detail_view, name="detail"),
|
||||||
{%- else %}
|
{%- else %}
|
||||||
path("<str:username>/", view=user_detail_view, name="detail"),
|
path("<str:username>/", view=user_detail_view, name="detail"),
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
|
@ -11,7 +11,7 @@ User = get_user_model()
|
||||||
class UserDetailView(LoginRequiredMixin, DetailView):
|
class UserDetailView(LoginRequiredMixin, DetailView):
|
||||||
|
|
||||||
model = User
|
model = User
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
slug_field = "id"
|
slug_field = "id"
|
||||||
slug_url_kwarg = "id"
|
slug_url_kwarg = "id"
|
||||||
{%- else %}
|
{%- else %}
|
||||||
|
@ -47,7 +47,7 @@ class UserRedirectView(LoginRequiredMixin, RedirectView):
|
||||||
permanent = False
|
permanent = False
|
||||||
|
|
||||||
def get_redirect_url(self):
|
def get_redirect_url(self):
|
||||||
{% if cookiecutter.username_type == "email" -%}
|
{%- if cookiecutter.username_type == "email" -%}
|
||||||
return reverse("users:detail", kwargs={"pk": self.request.user.pk})
|
return reverse("users:detail", kwargs={"pk": self.request.user.pk})
|
||||||
{%- else %}
|
{%- else %}
|
||||||
return reverse("users:detail", kwargs={"username": self.request.user.username})
|
return reverse("users:detail", kwargs={"username": self.request.user.username})
|
||||||
|
|
Loading…
Reference in New Issue
Block a user