mirror of
https://github.com/cookiecutter/cookiecutter-django.git
synced 2025-09-22 03:42:35 +03:00
Upgrade CC-Dj 2023-05-16 C / Custom User
This commit is contained in:
parent
5b84e42ad2
commit
b84bf7b24d
|
@ -119,10 +119,6 @@ Answer the prompts with your own desired [options](http://cookiecutter-django.re
|
||||||
4 - Apache Software License 2.0
|
4 - Apache Software License 2.0
|
||||||
5 - Not open source
|
5 - Not open source
|
||||||
Choose from 1, 2, 3, 4, 5 [1]: 1
|
Choose from 1, 2, 3, 4, 5 [1]: 1
|
||||||
Select username_type: # NOT USED FOR THIS TEMPLATE
|
|
||||||
1 - username
|
|
||||||
2 - email
|
|
||||||
Choose from 1, 2 [1]: 1
|
|
||||||
timezone [UTC]: America/Los_Angeles
|
timezone [UTC]: America/Los_Angeles
|
||||||
windows [n]: n
|
windows [n]: n
|
||||||
use_pycharm [n]: y
|
use_pycharm [n]: y
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
"Apache Software License 2.0",
|
"Apache Software License 2.0",
|
||||||
"Not open source"
|
"Not open source"
|
||||||
],
|
],
|
||||||
"username_type": ["email"],
|
|
||||||
"timezone": "UTC",
|
"timezone": "UTC",
|
||||||
"windows": "n",
|
"windows": "n",
|
||||||
"use_pycharm": "n",
|
"use_pycharm": "n",
|
||||||
|
|
|
@ -24,13 +24,6 @@ author_name:
|
||||||
email:
|
email:
|
||||||
The email address you want to identify yourself in the project.
|
The email address you want to identify yourself in the project.
|
||||||
|
|
||||||
username_type:
|
|
||||||
The type of username you want to use in the project. This can be either
|
|
||||||
``username`` or ``email``. If you choose ``username``, the ``email`` field
|
|
||||||
will be included. If you choose ``email``, the ``username`` field will be
|
|
||||||
excluded. It is best practice to always include an email field, so there is
|
|
||||||
no option for having just the ``username`` field.
|
|
||||||
|
|
||||||
domain_name:
|
domain_name:
|
||||||
The domain name you plan to use for your project once it goes live.
|
The domain name you plan to use for your project once it goes live.
|
||||||
Note that it can be safely changed later on whenever you need to.
|
Note that it can be safely changed later on whenever you need to.
|
||||||
|
|
|
@ -426,9 +426,6 @@ def main():
|
||||||
if "{{ cookiecutter.open_source_license}}" != "GPLv3":
|
if "{{ cookiecutter.open_source_license}}" != "GPLv3":
|
||||||
remove_gplv3_files()
|
remove_gplv3_files()
|
||||||
|
|
||||||
# if "{{ cookiecutter.username_type }}" == "username":
|
|
||||||
# remove_custom_user_manager_files()
|
|
||||||
|
|
||||||
if "{{ cookiecutter.use_pycharm }}".lower() == "n":
|
if "{{ cookiecutter.use_pycharm }}".lower() == "n":
|
||||||
remove_pycharm_files()
|
remove_pycharm_files()
|
||||||
|
|
||||||
|
|
|
@ -43,8 +43,6 @@ def context():
|
||||||
|
|
||||||
|
|
||||||
SUPPORTED_COMBINATIONS = [
|
SUPPORTED_COMBINATIONS = [
|
||||||
{"username_type": "username"},
|
|
||||||
{"username_type": "email"},
|
|
||||||
{"open_source_license": "MIT"},
|
{"open_source_license": "MIT"},
|
||||||
{"open_source_license": "BSD"},
|
{"open_source_license": "BSD"},
|
||||||
{"open_source_license": "GPLv3"},
|
{"open_source_license": "GPLv3"},
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import uuid
|
||||||
from django.contrib.auth import get_user_model
|
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
|
||||||
|
@ -16,8 +17,8 @@ class UserViewSet(RetrieveModelMixin, ListModelMixin, UpdateModelMixin, GenericV
|
||||||
lookup_field = "uuid"
|
lookup_field = "uuid"
|
||||||
|
|
||||||
def get_queryset(self, *args, **kwargs):
|
def get_queryset(self, *args, **kwargs):
|
||||||
assert isinstance(self.request.user.id, int)
|
assert isinstance(self.request.user.uuid, uuid.UUID)
|
||||||
return self.queryset.filter(id=self.request.user.id)
|
return self.queryset.filter(uuid=self.request.user.uuid)
|
||||||
|
|
||||||
@action(detail=False)
|
@action(detail=False)
|
||||||
def me(self, request):
|
def me(self, request):
|
||||||
|
|
|
@ -8,7 +8,8 @@ from factory.django import DjangoModelFactory
|
||||||
|
|
||||||
class UserFactory(DjangoModelFactory):
|
class UserFactory(DjangoModelFactory):
|
||||||
email = Faker("email")
|
email = Faker("email")
|
||||||
name = Faker("name")
|
first_name = Faker("name")
|
||||||
|
last_name = Faker("name")
|
||||||
|
|
||||||
@post_generation
|
@post_generation
|
||||||
def password(self, create: bool, extracted: Sequence[Any], **kwargs):
|
def password(self, create: bool, extracted: Sequence[Any], **kwargs):
|
||||||
|
|
|
@ -30,6 +30,6 @@ class TestUserViewSet:
|
||||||
|
|
||||||
assert response.data == {
|
assert response.data == {
|
||||||
"email": user.uuid,
|
"email": user.uuid,
|
||||||
"name": user.first_name,
|
"first_name": user.first_name,
|
||||||
"url": f"http://testserver/api/users/{user.uuid}/",
|
"url": f"http://testserver/api/users/{user.uuid}/",
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,8 @@ class TestUserAdminCreationForm:
|
||||||
form = UserAdminCreationForm(
|
form = UserAdminCreationForm(
|
||||||
{
|
{
|
||||||
"email": user.email,
|
"email": user.email,
|
||||||
|
"first_name": user.first_name,
|
||||||
|
"last_name": user.last_name,
|
||||||
"password1": user.password,
|
"password1": user.password,
|
||||||
"password2": user.password,
|
"password2": user.password,
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ from {{ cookiecutter.project_slug }}.users.models import User
|
||||||
|
|
||||||
def test_detail(user: User):
|
def test_detail(user: User):
|
||||||
assert (
|
assert (
|
||||||
reverse("users:detail", kwargs={"username": user.uuid})
|
reverse("users:detail", kwargs={"uuid": user.uuid})
|
||||||
== f"/users/{user.uuid}/"
|
== f"/users/{user.uuid}/"
|
||||||
)
|
)
|
||||||
assert resolve(f"/users/{user.uuid}/").view_name == "users:detail"
|
assert resolve(f"/users/{user.uuid}/").view_name == "users:detail"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user