将Recaptcha表单添加到我的Django登录页面 [英] Adding a Recaptcha form to my Django login page

查看:50
本文介绍了将Recaptcha表单添加到我的Django登录页面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将Recaptcha添加到我的登录表单中.我正在追踪存储库,但是我遇到了一些问题:我将此添加到了我的 views.py :

I'd like to add Recaptcha to my login form. I'm following this repository but i'm having some problems: i added this to my views.py:

from django import forms
from captcha.fields import ReCaptchaField

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

但是我真的不知道从这里去哪里.我想我需要在 login.html 页面中添加一些内容,但我不知道是什么.谁能给我些帮助吗?请注意,我已经将我的公钥和私钥添加到了 settings.py 文件中.

But i don't really know where to go from here. I suppose i need to add something to my login.html page but i don't know what. Can anyone give me some help? Note that i already added my public and private keys to my settings.py file.

这是整个 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

You can achieve your goal without external libs by subclassing LoginForm from django.contrib.auth

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

Please see this answer for code examples and a more detailed explanation. Using context processors you can also add the recaptcha public key into login.html template.

这篇关于将Recaptcha表单添加到我的Django登录页面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆