Muh*_*ain 3 python django-rest-framework django-rest-auth
模型.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
name = models.CharField(max_length=255)
def __str__(self):
return self.email
Run Code Online (Sandbox Code Playgroud)
表格.py
from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm):
model = CustomUser
fields = ('username','email')
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = CustomUser
fields = UserChangeForm.Meta.fields
Run Code Online (Sandbox Code Playgroud)
序列化程序.py
from rest_framework import serializers
from . import models
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = models.CustomUser
fields = ('email', 'username', )
Run Code Online (Sandbox Code Playgroud)
username从登录端点删除字段您可以username通过覆盖LoginSerializer这样的内容来删除该字段:
from rest_auth.serializers import LoginSerializer as RestAuthLoginSerializer
class LoginSerializer(RestAuthLoginSerializer):
username = None
Run Code Online (Sandbox Code Playgroud)
然后在你的添加以下内容settings.py:
REST_AUTH_SERIALIZERS = {'LOGIN_SERIALIZER': 'path.to.your.LoginSerializer'}
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
Run Code Online (Sandbox Code Playgroud)
事实证明,这实际上不是 OP 的问题,但为了完整起见,我将其留在这里。
您可以添加一个端点来更改用户设置,如下所示:
from rest_framework import serializers, generics
from . import models
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = models.CustomUser
fields = ('email', 'password')
class UserChangeView(generics.UpdateAPIView):
queryset = models.CustomUser.objects.all()
serializer_class = UserSerializer
Run Code Online (Sandbox Code Playgroud)
顺便说一下,您不需要 API 的表单。
| 归档时间: |
|
| 查看次数: |
1664 次 |
| 最近记录: |