Добавление формы Recaptcha на мою страницу входа в Django - PullRequest
0 голосов
/ 26 февраля 2019

Я хотел бы добавить Recaptcha в мою форму входа.Я слежу за этим хранилищем, но у меня возникли некоторые проблемы: я добавил это в свой views.py:

from django import forms
from captcha.fields import ReCaptchaField

class FormWithCaptcha(forms.Form):
    captcha = ReCaptchaField()

Но я не знаю, куда идти отсюда,Я полагаю, мне нужно что-то добавить на мою страницу login.html, но я не знаю что.Кто-нибудь может мне помочь?Обратите внимание, что я уже добавил свои открытые и закрытые ключи в мой файл settings.py.

Это целое views.py:

from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import Tutorial
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import login, logout, authenticate
from django.contrib import messages
from .forms import NewUserForm

from django import forms
from captcha.fields import ReCaptchaField

class FormWithCaptcha(forms.Form):
    captcha = ReCaptchaField()

def homepage(request):
    return render(request=request,
                  template_name="main/home.html",
                  context={"tutorials": Tutorial.objects.all})

def register(request):
    if request.method == "POST":
        form = NewUserForm(request.POST)
        if form.is_valid():
            user = form.save()
            username = form.cleaned_data.get('username')
            messages.success(request, f"New Account Created: {username}")
            login(request, user)
            messages.info(request, f"You are now logged in as {username}")
            return redirect("main:homepage")
        else:
            for msg in form.error_messages:
                messages.error(request, f"{msg}: {form.error_messages[msg]}")


    form = NewUserForm
    return render(request,
                  "main/register.html",
                  context={"form":form})

def logout_request(request):
    logout(request)
    messages.info(request, "Logged out successfully!")
    return redirect("main:homepage")

def login_request(request):
    if request.method == "POST":
        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")

    form = AuthenticationForm()
    return render(request,
                  "main/login.html",
                  {"form":form})

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Вы можете достичь своей цели без внешних библиотек, создав подкласс LoginForm из django.contrib.auth

Пожалуйста, посмотрите этот ответ для примеров кода и более подробного объяснения.Используя контекстные процессоры, вы также можете добавить открытый ключ recaptcha в шаблон login.html.

0 голосов
/ 26 февраля 2019

Вы должны опубликовать свой views.py, чтобы я мог помочь вам лучше, но используя здравый смысл Django, вы должны визуализировать файл login.html с FormWithCaptcha в качестве переменной контекста, например, с именем recaptcha, а затем в вызове файла входа в систему.это как {{recaptcha}}, где вам это нужно.Но, опять же, опубликуйте файл просмотров, если ваша проблема еще не устранена.

def login_request(request):
    if request.method == "POST":
        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")

    form = AuthenticationForm()
    recaptcha = FormWithCaptcha()
    return render(request,
                  "main/login.html",
                  {"form":form, "recaptcha": recaptcha})
...