Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中将模块的登录视图与我自己的登录视图集成_Python_Django_Django Views_Django Authentication_Two Factor Authentication - Fatal编程技术网

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

Python 在Django中将模块的登录视图与我自己的登录视图集成,python,django,django-views,django-authentication,two-factor-authentication,Python,Django,Django Views,Django Authentication,Two Factor Authentication,我正在尝试使用将双因素身份验证添加到我的项目中。我注意到模块有自己的登录视图,您可以找到它,请参阅类LoginViewWideImpotentSessionWizardView: 我遇到的问题是,我已经有了自己的登录视图来处理身份验证表单,那么为什么要使用模块的视图呢?我只需要将2FA部分添加到我自己的视图中,而不是使用另一个,但不幸的是,该模块在这一部分中并不清楚 所以问题是:如何将他们的登录视图集成到我自己的登录视图中?如何在不使用其他登录处理程序的情况下将2fa部分添加到自己的部分 欢迎提

我正在尝试使用将双因素身份验证添加到我的项目中。我注意到模块有自己的登录视图,您可以找到它,请参阅类LoginViewWideImpotentSessionWizardView:

我遇到的问题是,我已经有了自己的登录视图来处理身份验证表单,那么为什么要使用模块的视图呢?我只需要将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")

编辑:有人建议我使用他们自己的登录视图。是的,那会容易些。但在未来,我想添加更多的东西登录,如验证码形式或其他领域。但这是不可能的,因为我不会使用自己的视图,而是使用模块的视图。是这样吗?

将此处的评论转换为讨论:

通常,您希望在滚动自己的视图之前使用Django提供的视图,甚至在从一开始滚动自己的视图之前,您希望继承和扩展Django视图,例如

同样的原则也适用于架构良好的外部库,如链接的django双因素auth

首先,您只需要使用其中包含的视图,可能是直接包含

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

从两个因素视图导入LoginView MyLoginView类LoginView: template\u name='super\u fancy\u login\u template.html' 表格列表= “auth”,MyAwesomeAuthenticationForm, ... 剩下的就在这里了。。。 并在库提供的视图位于同一路径之前将其连接到URL中:

从django.conf.url导入url 从my_awesome_app.views导入MyLoginView URL模式=[ 网址 regex=r“^account/login/$”, 视图=MyLoginView.as\u视图, name='login', , 包括 ] 嘿,普雷斯托,你已经用自己的视图替换了一个视图


显然,你越是更换像这样的部件,你就越少有任何保证,而不是开源软件有任何保证;这些东西仍然可以正常工作。

您首先不需要编写自己的登录视图–Django附带了Django.contrib.auth.views.LoginView。我建议你扔掉自己的登录视图,使用2FA库的登录视图。嘿!看一下编辑器,然后您将从库的LoginView继承自定义LoginView并根据需要进行自定义。我将如何做到这一点?通过在我自己的views.py文件上调用模块的登录视图并在其中添加额外字段,但是如果我想更改表单的一部分,该怎么办?例如,我希望它询问电子邮件字段而不是昵称字段。当我继承原始表单时,如何从原始表单中删除它?嘿!再次感谢。你能澄清最后两行吗?因为对于我正在构建的项目来说,安全性将是一个极其重要的部分,所以我需要重点关注这一点,因为有一天我可能会处理敏感数据。重点是,虽然外部库通常会经过测试,但除非您自己测试,否则您更换的组件不会。在这种情况下,如果你想自杀,你可以用一个接受任何输入、找到第一个管理员用户并以他们的身份登录的AuthenticationForm来代替AuthenticationForm。最后一个问题:我是django的新手,所以我还在学习视图等。所以我还不能真正判断,但在你看来,2FA模块提供的LoginView可以吗?我的意思是,一旦我的项目在很长一段时间内投入使用,它通常是一种我可以使用的观点吗?是的。这是一个受欢迎的、经过战斗考验的项目。