0

我有两种看法。

class IndexView(TemplateView):
    template_name = 'index.html'

@require_POST
@login_required
def partial_view(request):
    return render(request, 'partials/stuff.html')

LOGIN_URL我希望索引页面是“公共的”,但如果用户采取行动(触发部分视图) ,如果没有登录,他们应该被重定向到。

问题是我的部分视图将返回整个LOGIN_URL页面。所以现在页面中有一个页面。

使用部分视图时是否可以重定向“父”页面?

4

1 回答 1

1

我没有设法使“登录后重定向”工作,但我的解决方案足以满足我的需求。

from django.contrib.auth import REDIRECT_FIELD_NAME
from django.conf import settings
from django.contrib.auth.decorators import login_required as django_login_required
from django.http import HttpResponse
from functools import wraps

from django.shortcuts import resolve_url


def login_required(function=None, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
    @wraps(function)
    def wrapper(request, *args, **kwargs):
        if not request.user.is_authenticated and request.htmx:
            resolved_login_url = resolve_url(login_url or settings.LOGIN_URL)
            return HttpResponse(status=204, headers={'HX-Redirect': resolved_login_url})
        return django_login_required(
            function=function,
            login_url=login_url,
            redirect_field_name=redirect_field_name
        )(request, *args, **kwargs)
    return wrapper

于 2022-02-05T21:45:18.750 回答