在DRF中使用Djoser,如何给注册表单添加Username字段?
解决Djoser注册表单添加Username字段的问题
要在Djoser的用户注册流程中添加Username字段,核心是自定义Djoser的注册序列化器并指定给Djoser使用,具体步骤如下:
1. 自定义注册序列化器
在你的serializers.py中,继承Djoser的CreateUserSerializer,重写其Meta类来包含username字段:
from djoser.serializers import CreateUserSerializer from django.contrib.auth import get_user_model User = get_user_model() class CustomUserCreateSerializer(CreateUserSerializer): class Meta(CreateUserSerializer.Meta): model = User fields = ('id', 'username', 'email', 'password') # 可按需添加state、city等其他字段
注:如果你的
UserSerializer已经包含了额外业务字段,也可以让它直接继承CreateUserSerializer,确保注册流程能处理所有需要的字段。
2. 在settings.py中配置Djoser
告诉Djoser使用你自定义的注册序列化器,添加以下配置:
DJOSER = { 'SERIALIZERS': { 'user_create': 'your_app.serializers.CustomUserCreateSerializer', # 替换为你的序列化器实际路径 'user': 'your_app.serializers.UserSerializer', # 可选:配置自定义用户详情序列化器 }, # 可选配置:开启密码确认输入框 'USER_CREATE_PASSWORD_RETYPE': True, }
3. 修正URL路由冲突
你的urls.py存在重复路由配置,会导致Djoser路由解析异常,修改为:
urlpatterns = [ path('', include(router.urls)), path('api/auth/', include('djoser.urls')), path('api/auth/', include('djoser.urls.jwt')), # 移除重复的path('api/auth/users/',include('djoser.urls')) ]
4. 确认用户模型字段规则
如果使用自定义用户模型,需确保username字段设置为必填且唯一;若使用Django默认User模型,username本身就是必填字段,无需额外调整。
完成以上配置后,用户注册接口(默认路径为/api/auth/users/)就会要求传入username、email和password字段,DRF的浏览器可视化界面也会同步显示对应的Username输入框。
内容的提问来源于stack exchange,提问作者lionflick
相关产品推荐
相关产品推荐

