当前位置: 首页> 健康> 科研 > 网络营销研究背景及意义_自己怎么学电商运营_潍坊百度快速排名优化_今日热点新闻头条国内

网络营销研究背景及意义_自己怎么学电商运营_潍坊百度快速排名优化_今日热点新闻头条国内

时间:2025/7/15 12:52:50来源:https://blog.csdn.net/qq_59344127/article/details/146267781 浏览次数:2次
网络营销研究背景及意义_自己怎么学电商运营_潍坊百度快速排名优化_今日热点新闻头条国内

抛弃 Django 自带用户管理后,能否使用 simple-jwt

一、结论

是的,即使抛弃了 Django 自带的用户管理AbstractUserAbstractBaseUser),仍然可以使用 django-rest-framework-simplejwt(简称 simple-jwt)来进行 JWT 认证。但需要进行 额外配置,确保 simple-jwt 能识别和处理你的自定义用户模型。


二、Django 用户管理的作用

Django 自带的用户管理提供:

  1. AbstractUser / AbstractBaseUser 作为默认用户模型。
  2. django.contrib.auth 认证系统,如 authenticate()login()logout()
  3. 默认的 User 模型,用于管理权限、组等。

如果你完全抛弃 Django 的用户管理(如不继承 AbstractUser),你需要:

  • 自定义用户模型
  • 自定义 simple-jwt 的用户解析逻辑
  • 手动实现 authenticate() 逻辑

三、如何自定义 JWT 认证

1. 安装 djangorestframework-simplejwt
pip install djangorestframework-simplejwt
2. 在 settings.py 进行基础配置
INSTALLED_APPS += ["rest_framework_simplejwt"]REST_FRAMEWORK = {"DEFAULT_AUTHENTICATION_CLASSES": ("rest_framework_simplejwt.authentication.JWTAuthentication",)
}
3. 自定义用户模型

如果你不使用 Django 默认的 User,可以创建自己的 CustomUser 模型:

from django.db import modelsclass CustomUser(models.Model):id = models.AutoField(primary_key=True)username = models.CharField(max_length=255, unique=True)email = models.EmailField(unique=True)password = models.CharField(max_length=255)is_active = models.BooleanField(default=True)def __str__(self):return self.username
4. 自定义 get_user_model()

由于 Django 默认的 get_user_model() 依赖 AbstractUser,如果完全抛弃 Django 用户管理,你可以手动指定用户模型

from myapp.models import CustomUserdef get_custom_user(identifier):"""支持使用用户名或邮箱获取用户"""try:return CustomUser.objects.get(username=identifier)except CustomUser.DoesNotExist:try:return CustomUser.objects.get(email=identifier)except CustomUser.DoesNotExist:return None
5. 自定义 JWTAuthentication

因为 simple-jwt 默认使用 Django 自带的 User,你需要自定义 JWTAuthentication 来适配 CustomUser

from rest_framework_simplejwt.authentication import JWTAuthenticationclass CustomJWTAuthentication(JWTAuthentication):def get_user(self, validated_token):try:user_id = validated_token.get("user_id")return CustomUser.objects.get(id=user_id)except CustomUser.DoesNotExist:return None

然后在 settings.py 替换 DEFAULT_AUTHENTICATION_CLASSES

REST_FRAMEWORK = {"DEFAULT_AUTHENTICATION_CLASSES": ("path.to.CustomJWTAuthentication",)
}
6. 自定义 Token 生成视图

由于 simple-jwt 默认使用 User 进行认证,你需要自定义 Token 生成逻辑

from rest_framework_simplejwt.views import TokenObtainPairView
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from django.contrib.auth.hashers import check_passwordclass CustomTokenObtainPairSerializer(TokenObtainPairSerializer):def validate(self, attrs):username = attrs.get("username")password = attrs.get("password")user = get_custom_user(username)if not user or not check_password(password, user.password):raise serializers.ValidationError("用户名或密码错误")data = super().validate(attrs)return dataclass CustomTokenObtainPairView(TokenObtainPairView):serializer_class = CustomTokenObtainPairSerializer

然后在 urls.py 里注册:

from django.urls import path
from path.to.views import CustomTokenObtainPairView
from rest_framework_simplejwt.views import TokenRefreshViewurlpatterns = [path("api/token/", CustomTokenObtainPairView.as_view(), name="token_obtain_pair"),path("api/token/refresh/", TokenRefreshView.as_view(), name="token_refresh"),
]

四、总结

方案需要修改
直接使用 Django User无需修改,默认支持 simple-jwt
继承 AbstractUser支持 simple-jwt,只需 settings.AUTH_USER_MODEL
完全自定义用户模型需要手动适配 JWTAuthentication,重写 TokenObtainPairSerializer
推荐方案
  • 如果只是调整 User 字段,建议继承 AbstractUser,这样 simple-jwt 仍然可用
  • 如果完全自定义用户模型,必须手动适配 simple-jwt

总之,抛弃 Django 的 User 仍然可以使用 simple-jwt,但需要额外开发 JWTAuthentication 逻辑。🚀

关键字:网络营销研究背景及意义_自己怎么学电商运营_潍坊百度快速排名优化_今日热点新闻头条国内

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: