获取登录用户有两种方式

1.中间件
2.request.user

1.中间件

from threading import local

_user = local()


class CurrentUserMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        _user.value = request.user
        response = self.get_response(request)
        return response

    @staticmethod
    def get_current_user():
        return getattr(_user, 'value', None)

setting中

MIDDLEWARE = [
    # ...
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    #...
    #需要在 auth中间件后面
    "backend.middleware.CurrentUserMiddleware",
]

使用

form .middleware import CurrentUserMiddleware

user = CurrentUserMiddleware.get_current_user()

# model中使用
class MyModel(models.Model):
    creator = models.ForeignKey(User, on_delete=models.SET_NULL, verbose_name='创建人',
                               related_name='creator', null=True, blank=True, )

    def save(self, *args, **kwargs):
        if not self.pk and not self.author:
            self.author = CurrentUserMiddleware.get_current_user()
        super().save(*args, **kwargs)

2.request

@api_view(["GET"])
@authentication_classes([SessionAuthentication, BasicAuthentication])
@permission_classes([IsAuthenticated])
def tag_create(request):
    user=request.user

标签: django, python

添加新评论