Интеграция представления входа модуля с моим представлением входа в Django - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь использовать эту библиотеку , чтобы добавить двухфакторную аутентификацию в мой проект.Я заметил, что у модуля есть свой собственный вид входа в систему, который вы можете найти прямо здесь , см. 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")

Редактировать: мне предложили использовать собственный вид входа в систему.Да, было бы проще.Но в будущем я хотел бы добавить больше материала для входа в систему, например, форму для ввода капчи или другие поля.Но это было бы невозможно, так как я бы использовал не собственное представление, а представление модуля.Это верно?

1 Ответ

1 голос
/ 18 марта 2019

Преобразование обсуждения из комментариев здесь:

В общем, вы хотите использовать представленные Django виды, обеспечиваемые батареями, перед тем, как развернуть свои собственные, и даже перед тем, как свернуть свои собственные с самого начала,хотите наследовать и расширять представления Django, такие как LoginView .

Тот же принцип применяется к (хорошо спроектированным) внешним библиотекам, таким как связанные django-two-factor-auth.

Сначала вы просто используете представленные в нем представления, вероятно, напрямую include() с помощью модуля urls .

Затем, если вам нужно что-то настроить в этих представленияхвы бы унаследовали это представление, например,

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, вы заменили представление своим собственным.

Очевидно, что чем больше вы заменяете такие детали, тем меньше у вас будет никаких «гарантий» (не то, что приходит программное обеспечение с открытым исходным кодом).с гарантией вообще;)) что делапо-прежнему работать, как они должны.

...