контекстный процессор: как написать логин и регистрацию во всех представлениях - PullRequest
0 голосов
/ 27 марта 2020

Я создал вид для входа в систему / регистрации / забыть пароль (5 форм в одном представлении). Мне нужны эти формы в заголовке, поэтому я добавил ссылки в базу. html и расширил все шаблоны. Как я могу сделать это представление доступным для всех шаблонов.

def master_link(request):
    login_form = UserLoginForm()
    send_otp_form = SendOTPForm()
    verify_otp_form = VerifyOTPForm()
    registration_form = RegistrationForm()
    forget_password_form = ForgetPasswordForm()
    if request.method == 'POST' and 'login_submit' in request.POST:
        login_form = UserLoginForm(request.POST)

        if login_form.is_valid():
            user = login_form.login(request)
            if user:
                login(request, user)
                return HttpResponseRedirect(reverse('home'))

    elif request.method == 'POST' and 'send_otp_submit' in request.POST:
        send_otp_form = SendOTPForm(request.POST)

        if send_otp_form.is_valid():
            mobile_number = send_otp_form.cleaned_data['mobile_number']
            type_otp = send_otp_form.cleaned_data['type']
            otp = random.randint(1000, 9999)
            otpobj = sendotp.sendotp.sendotp(settings.AUTH_KEY, str(otp) + ' keep otp with you.')
            otpobj.send(mobile_number, 'TestOTP', otp)
            return HttpResponseRedirect(reverse('verify_otp', args=(mobile_number, type_otp)))

    elif request.method == 'POST' and 'signup_submit' in request.POST:
        registration_form = RegistrationForm(request.POST)
        if registration_form.is_valid():
            user = registration_form.save(commit=False)
            mobile_number = registration_form.cleaned_data['mobile_number']
            user.username = registration_form.cleaned_data['mobile_number']
            password = registration_form.cleaned_data['password']
            gender = request.POST.get('inlineRadioOptions')
            user.gender = gender
            user.mobile_number = mobile_number
            user.set_password(password)
            user.save()
            new_user = authenticate(username=mobile_number, password=password)
            login(request, new_user)
            return HttpResponseRedirect(reverse('home'))

    elif request.method == 'POST' and 'forget_password_submit' in request.POST:
        forget_password_form = ForgetPasswordForm(request.POST)
        if forget_password_form.is_valid():
            password = forget_password_form.cleaned_data['password']
            mobile_number = forget_password_form.cleaned_data['mobile_number']
            user = User.objects.get(mobile_number=mobile_number)
            user.set_password(password)
            user.save()
            return HttpResponseRedirect(reverse('home'))

    elif request.method == 'POST':
        verify_otp_form = VerifyOTPForm(request.POST)
        if verify_otp_form.is_valid():
            return HttpResponseRedirect(reverse('home'))

    # SportsMaster
    sports_data = SportsMaster.objects.all()

    context = {
        'login_form': login_form,
        'send_otp_form': send_otp_form,
        'verify_otp_form': verify_otp_form,
        'registration_form': registration_form,
        'forget_password_form': forget_password_form,
        'sports_data':sports_data,
    }
    return render(request, 'user_front/user_login.html', context)

Я не могу написать эти функции во всех представлениях. Я знаю, что могу использовать контекстный процессор для отправки переменных во всех шаблонах, но как я могу использовать эти функции во всех представлениях. Также у меня есть 3 приложения, и я должен отправить эти переменные только в 1 приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...