在Django中将模块的登录视图与我自己的登录视图集成

问题描述 投票:0回答:1

我正在尝试使用this library为我的项目添加双因素身份验证。我注意到模块有自己的登录视图,你可以找到正确的here,请参阅class LoginView(IdempotentSessionWizardView):

我遇到的问题是我已经拥有自己的登录视图来处理身份验证表单,为什么我会使用模块的视图?我只需要将2FA部分添加到我自己的视图中,而不是使用另一个部分,但遗憾的是该模块在这一部分并不是很清楚。

所以问题是:我如何将他们的登录视图集成到我自己的登录视图中?如何在不使用其他登录处理程序的情况下将2fa部分添加到我自己的部分?

欢迎任何建议,这是我已经存在的登录视图:

def login_request(request):


    if request.method == "POST":

        if result['success']:
            form = AuthenticationForm(request, data=request.POST)
            if form.is_valid():
                username = form.cleaned_data.get('username')
                password = form.cleaned_data.get('password')
                user = authenticate(username=username, password=password)


                if user is not None:
                    login(request, user)
                    messages.info(request, f"You are now logged in as {username}")
                    return redirect("main:homepage")
                else:
                    messages.error(request, "Invalid username or password")

            else:
                messages.error(request, "Invalid username or password")

编辑:我被建议使用自己的登录视图。是的,这会更容易。但是在将来我想在登录中添加更多内容,例如验证码表格或其他字段。但那是不可能的,因为我不会使用我自己的视图而是模块的视图。是对的吗?

python django django-views django-authentication two-factor-authentication
1个回答
1
投票

从这里的评论转换讨论:

一般来说,你想在使用Django提供的电池提供的视图之前自己动手,甚至在从头开始编辑自己的视图之前,你想要继承并扩展Django视图,例如LoginView

同样的原则适用于(架构良好的)外部库,如链接的django-two-factor-auth

首先,您只需使用其中包含的视图,可能直接使用include()ing urls module

然后,如果您确实需要在这些视图中自定义某些内容,则您将从该视图继承,例如

from two_factor.views import LoginView

class MyLoginView(LoginView):
    template_name = 'super_fancy_login_template.html'
    form_list = (
        ('auth', MyAwesomeAuthenticationForm),
        # ... the rest from the original here ...
    )

并在同一条路径上的库提供的视图之前将它挂在urls中:

from django.conf.urls import url
from my_awesome_app.views import MyLoginView

urlpatterns = [
    url(
        regex=r'^account/login/$',
        view=MyLoginView.as_view(),
        name='login',
    ),
    include(...),
]

嘿presto,你用自己的视图替换了一个视图。

显然,你更换这样的部件越多,你就越少有“保修”(不是说开源软件都带有保修;))事情仍然可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.