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

DRF Web界面无法通过JWT认证发布博客(Postman可正常运行)

问题解决思路

核心原因

DRF的可浏览API界面(Browsable API)默认仅支持Session认证和Basic认证,而你的JWT Token需要通过Authorization: Bearer <token>请求头传递,但Web界面的默认表单提交不会自动携带这个头,导致接口识别你为匿名用户(AnonymousUser),无法给Blog.author赋值。

解决方案

方案1:同时支持Session和JWT认证(推荐调试用)

在项目的settings.py中修改DRF配置,同时启用Session认证和JWT认证,这样Web界面可以用账号密码登录(走Session),Postman继续用JWT,互不影响:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
        # 根据你使用的JWT库选择对应类
        'rest_framework_simplejwt.authentication.JWTAuthentication',  # 新版simplejwt
        # 'rest_framework_jwt.authentication.JSONWebTokenAuthentication',  # 旧版JWT库
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ]
}

配置完成后,打开DRF Web界面,点击右上角的"Login"按钮,输入用户名密码登录,之后提交博客就会自动识别当前用户,不会再出现AnonymousUser的错误。

方案2:让Web界面支持JWT Token提交

如果不想用Session认证,可以自定义DRF的可浏览API模板,添加Token输入框并自动将Token放入请求头。不过这个步骤较繁琐,调试阶段优先推荐方案1。

额外优化:Serializer自动赋值作者

在你的Blog Serializer中,用CurrentUserDefault()自动设置当前登录用户为作者,避免手动赋值出错:

from rest_framework import serializers
from .models import Blog

class BlogSerializer(serializers.ModelSerializer):
    # 隐藏字段,自动获取当前登录用户
    author = serializers.HiddenField(default=serializers.CurrentUserDefault())

    class Meta:
        model = Blog
        fields = ['title', 'content', 'author']

这样无论用Postman还是Web界面,只要认证通过,author字段都会自动填充,无需手动输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:06:32