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

Django Rest Framework始终返回400错误,POST请求获取认证Token失败

Android Retrofit POST请求获取Token时持续返回400错误排查方案

我在Android端使用Retrofit发起POST请求,提交正确的用户名和密码以获取身份验证Token,但每次都收到400 Bad Request错误。后端基于Django REST Framework搭建,以下是我的URL配置片段:

from rest_framework.authtoken import views as tmp
from decaught import views
router = routers.DefaultRouter()
router.register(r'devices', views.DeviceViewSet)
router.register(r'users', views.UserViewSet)
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # 此处疑似缺少Token认证接口的配置
]

针对这个问题,我整理了几个关键排查方向:

  • 确认Token接口的URL配置是否完整
    DRF自带的obtain_auth_token视图是处理用户名密码POST请求并返回Token的核心接口,但你的当前配置里并没有把它加入urlpatterns。你需要补充这段配置:

    # Django 1.x 用url语法
    urlpatterns += [
        url(r'^api-token-auth/', tmp.obtain_auth_token),
    ]
    
    # 或者Django 2.0+ 用path语法
    from django.urls import path
    urlpatterns += [
        path('api-token-auth/', tmp.obtain_auth_token),
    ]
    
  • 检查Retrofit的请求格式是否匹配后端要求
    默认的obtain_auth_token接口只接受表单格式(application/x-www-form-urlencoded)的请求参数,参数名必须是username和password,不支持JSON格式提交。你的Retrofit接口应该这么定义:

    @FormUrlEncoded
    @POST("api-token-auth/")
    Call<ResponseBody> fetchAuthToken(@Field("username") String username, @Field("password") String password);
    

    如果一定要用JSON格式,你需要自定义Token认证视图来支持。

  • 验证请求URL的准确性
    确保Retrofit配置的BASE_URL加上接口路径后,和后端的实际接口地址完全一致,注意斜杠、大小写这类细节问题。

  • 查看后端错误日志定位具体问题
    400错误大多是请求参数或格式不符合要求,去Django的日志文件里查看详细错误信息,比如是否参数名拼写错误(比如把username写成user)、请求头设置不正确等,日志会给出明确提示。

  • 用工具先手动测试接口
    先用Postman、curl这类工具手动发送请求测试接口是否正常:

    curl -X POST -d "username=你的用户名&password=你的密码" http://你的域名/api-token-auth/
    

    如果手动测试能成功获取Token,那问题肯定出在Retrofit的请求配置上;如果手动也报错,就重点排查后端的接口配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:14:37