Django REST Framework过滤主键后无法获取当前登录用户问题
问题解决指导
一、profile视图调用接口返回空数据的问题
原因
在profile视图里用requests.get调用user_profile_info接口时,这个请求是全新的HTTP请求,不会携带当前登录用户的会话(session)信息,导致user_profile_info中的request.user是匿名用户,其id为None,自然查不到任何User数据,返回空数组。
解决方法
方案1:直接在视图内获取数据(推荐)
无需通过HTTP请求调用自身接口,直接在profile视图中查询数据库获取用户数据,高效且避免会话问题:
@login_required def profile(request): user = User.objects.filter(id=request.user.id).first() userData = {"user": [UserSerializer(user).data]} if user else {"user": []} print(userData) return render(request, 'profile.html')
方案2:传递会话Cookie
如果必须保留接口调用的方式,需要把当前请求的会话Cookie传递给requests:
@login_required def profile(request): response = requests.get( 'http://127.0.0.1:8000/user_profile_info/', cookies=request.COOKIES ) userData = response.json() print(userData) return render(request, 'profile.html')
二、自定义User模型数据库无对应表的问题
原因
- 未在
settings.py中配置AUTH_USER_MODEL,Django默认使用自带的auth.User模型,你的自定义User模型未被启用为认证模型。 - 可能未生成或应用针对自定义User模型的迁移文件。
解决方法
- 配置认证用户模型:在项目
settings.py中添加(替换为你的app名称,假设models.py在myapp下):
AUTH_USER_MODEL = 'myapp.User'
注意:该配置必须在首次执行迁移前设置;若已执行过迁移,需清理旧迁移文件和数据库中对应记录(操作前请备份数据)。
生成并应用迁移:
- 删除app下
migrations文件夹中除__init__.py外的所有文件,同时清理数据库django_migrations表中对应app的迁移记录。 - 执行命令:
python manage.py makemigrations python manage.py migrate
- 删除app下
注册Admin管理:在
admin.py中注册自定义User模型(若未注册):
from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import User admin.site.register(User, UserAdmin)
内容的提问来源于stack exchange,提问作者Ledge
相关产品推荐
相关产品推荐

