在我的Django登录页面中添加recaptcha表单



我想在我的登录表单中添加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})

您可以通过从django.contrib.auth

子类登录FOLFORM来实现您的目标

请参阅此答案以获取代码示例和更详细的说明。使用上下文处理器,您还可以将recaptcha公共密钥添加到登录中。html模板。

您应该发布您的 views.py,以便我可以更好地帮助您,但是使用常见的django Sense,您应该将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})

最新更新