私のバックエンドAPIから許可したいのは、任意のユーザーが.
、-
、_
、ñ
などの文字で作成できることです。そのusername
フィールドはprimary_key=True,
です。Django Rest Framework - "。"、 " - "、 "_"文字のフィールドユーザー名
私は私の興味のあるusername
分野に関連して、この方法の私のカスタムユーザー(AbstractBaseUser
)を定義します。
class User(AbstractBaseUser, PermissionsMixin):
username = models.CharField(
_('username'),
max_length=30,
primary_key=True,
unique=True,
help_text=_('Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[
RegexValidator(
r'^[\[email protected]+-]+$',
_('Enter a valid username. This value may contain only '
'letters, numbers ' 'and @/./+/-/_ characters.')
),
],
error_messages={
'unique': _("A user with that username already exists."),
},
)
email = models.EmailField(max_length=254, unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
objects = UserManager()
マイUserSerializer
はこれです:
class UserSerializer(serializers.ModelSerializer):
username = serializers.CharField(validators=[UniqueValidator(queryset=User.objects.all(), message='Lo sentimos, existe un fichaje con este nombre de usuario')])
email = serializers.EmailField(validators=[UniqueValidator(queryset=User.objects.all(), message='Lo sentimos, alguien ya ha sido fichado con este correo electrónico')])
class Meta:
model = User
fields = ('url', 'username', 'password', 'first_name','last_name',
'age','other fields ...',)
私UserViewSetです以下:
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
filter_fields = ('username', 'is_player', 'first_name', 'last_name', 'team' , 'email',)
ルートrは私がテusername
フィールドにbacalao.cevichica
のように例えば.
文字を持つユーザーを作成すると、ユーザーが作成され
urls.py
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)
にこのようOG定義されたが、私は
localhost:8000/api/users/
に行くときさ私は非常に慣れていないです
File "/home/bgarcial/.virtualenvs/fuupbol2/lib/python3.5/site-packages/django/urls/resolvers.py", line 392, in _reverse_with_prefix
(lookup_view_s, args, kwargs, len(patterns), patterns)
django.urls.exceptions.NoReverseMatch: Reverse for 'user-detail' with arguments '()' and keyword arguments '{'pk': 'bacalao.cevichica'}' not found. 2 pattern(s) tried: ['api/users/(?P<pk>[^/.]+)\\.(?P<format>[a-z0-9]+)/?$', 'api/users/(?P<pk>[^/.]+)/$']
:このメッセージが表示されます通常の表現で、RegexValidator
がうまく構成されていない可能性がありますか?
また、私の問題はUserSerializer
またはUserViewSet
にある可能性があります。
私はこのトピックをクリアしていない瞬間、どんなオリエンテーションも高く評価されています。 :)
:URLはどのような形式プライマリキーはにする必要があります知っているように、これは
([^./])
除外.
と/
文字デフォルトの正規表現ので、あなたは、あなたのビューセットに
lookup_value_regex
を追加することができていますパターンはピリオドをサポートしていません。正規表現で使用している正規表現を含めることはできますか? – TankorSmash@TankorSmash私が使用している正規表現は 'RegexValidator( r '^ [\ w。@ + - ] + $'、 のコードセクションです( '有効なユーザ名を入力してください。 ' 'の文字、数字 ''、@ /。/ +/-/_文字 ') )、 'モデルユーザー...のユーザー名欄には?私の謝罪、私は正規表現で初心者です – bgarcial