在Django类视图(CBV)中如何不通过URL获取登录用户的PK值
已登录用户主键获取方案
所有实现了会话身份认证体系的Web框架,都会将当前登录用户的实例绑定到请求对象中,无需从URL参数传递即可直接读取主键字段:
Django 框架调用方式
- 函数视图、类视图均可直接从请求对象读取:
def my_view(request): # 先校验用户登录状态,避免匿名用户访问报错 if request.user.is_authenticated: # pk是Django内置的主键别名,兼容自定义主键字段,直接读取即可 current_user_pk = request.user.pk
Flask 框架调用方式
- 配合Flask-Login扩展使用时,直接读取全局用户对象:
from flask_login import current_user @app.route('/your/route') def your_view(): if current_user.is_authenticated: # 主键字段如果自定义命名,替换下方的id为对应字段名即可 current_user_pk = current_user.id
Django REST Framework 调用方式
- 与原生Django逻辑一致,直接从请求对象获取:
from rest_framework.views import APIView from rest_framework.response import Response class CustomView(APIView): def get(self, request): if not request.user.is_authenticated: return Response({"msg": "请先登录"}, status=401) current_user_pk = request.user.pk # 后续业务逻辑
注意:必须先判断用户登录状态,匿名用户不存在对应的用户实例,直接读取属性会抛出异常。
内容的提问来源于stack exchange,提问作者user15999653
相关产品推荐
相关产品推荐

