You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于DRF 3.14创建超级用户API端点(Android客户端场景)

使用DRF 3.14通过POST请求创建超级用户(Android客户端适配)

后端实现(Django REST Framework 3.14)

1. 自定义用户序列化器

默认用户序列化器不会调用create_superuser方法,因此需要自定义序列化器处理超级用户创建逻辑:

# serializers.py
from django.contrib.auth.models import User
from rest_framework import serializers

class SuperUserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['username', 'email', 'password', 'is_superuser']
        extra_kwargs = {
            'password': {'write_only': True}  # 密码字段仅写入不返回
        }

    def create(self, validated_data):
        # 调用User模型的create_superuser方法创建超级用户
        user = User.objects.create_superuser(**validated_data)
        return user

2. 编写API视图

创建处理POST请求的视图,并添加权限控制(仅允许已认证的管理员访问,防止恶意创建):

# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAdminUser
from rest_framework import status
from .serializers import SuperUserSerializer

class CreateSuperUserView(APIView):
    permission_classes = [IsAdminUser]

    def post(self, request):
        serializer = SuperUserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

3. 配置URL路由

在项目urls.py中添加路由映射:

# urls.py
from django.urls import path
from .views import CreateSuperUserView

urlpatterns = [
    # 其他路由...
    path('api/create-superuser/', CreateSuperUserView.as_view(), name='create-superuser'),
]

Android客户端实现

1. 引入网络请求库

推荐使用Retrofit简化网络请求,在app/build.gradle中添加依赖:

dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}

2. 定义请求模型与接口

// ApiService.java
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;

public interface ApiService {
    @POST("api/create-superuser/")
    Call<SuperUserResponse> createSuperUser(@Body SuperUserRequest request);
}

// SuperUserRequest.java 请求体模型
public class SuperUserRequest {
    private String username;
    private String email;
    private String password;
    private boolean is_superuser;

    public SuperUserRequest(String username, String email, String password) {
        this.username = username;
        this.email = email;
        this.password = password;
        this.is_superuser = true; // 固定设置为超级用户
    }

    // 按需添加Getter、Setter方法
}

// SuperUserResponse.java 响应体模型
public class SuperUserResponse {
    private String username;
    private String email;
    private boolean is_superuser;

    // 按需添加Getter、Setter方法
}

3. 发送POST请求

在Android组件(如Activity/ViewModel)中执行网络请求,注意需在子线程操作:

// 初始化Retrofit
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://your-api-domain.com/") // 替换为你的API域名
        .addConverterFactory(GsonConverterFactory.create())
        .build();

ApiService apiService = retrofit.create(ApiService.class);

// 构造请求参数
SuperUserRequest request = new SuperUserRequest("new_admin", "admin@example.com", "StrongPass123!");

// 发送请求
Call<SuperUserResponse> call = apiService.createSuperUser(request);
call.enqueue(new Callback<SuperUserResponse>() {
    @Override
    public void onResponse(Call<SuperUserResponse> call, Response<SuperUserResponse> response) {
        if (response.isSuccessful()) {
            SuperUserResponse user = response.body();
            Toast.makeText(MainActivity.this, "超级用户创建成功:" + user.getUsername(), Toast.LENGTH_SHORT).show();
        } else {
            try {
                String errorMsg = response.errorBody().string();
                Toast.makeText(MainActivity.this, "创建失败:" + errorMsg, Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void onFailure(Call<SuperUserResponse> call, Throwable t) {
        Toast.makeText(MainActivity.this, "网络错误:" + t.getMessage(), Toast.LENGTH_SHORT).show();
    }
});

关键注意事项

  • 安全防护:必须使用HTTPS传输,避免密码明文泄露;若接口对外开放,需添加API密钥、IP白名单等额外验证机制。
  • 权限管控:后端视图的IsAdminUser权限不可随意移除,确保只有已认证的管理员才能创建超级用户。
  • 密码校验:客户端和后端都应添加密码强度校验,避免弱密码风险。

内容的提问来源于stack exchange,提问作者Hanaia Youcef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:40:21