Django登录验证码实现

登录验证码实现

只实现验证码功能,没有样式。后续验证码替换可改为ajax请求,实现局部刷新。

路由代码:

from django.contrib import admin
from django.urls import path
from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login), #登录接口
    path('update_yanzheng/', views.update_yanzheng),#验证码替换
]

视图代码:

# 验证码的实现
from PIL import Image, ImageDraw, ImageFont
import random
from io import BytesIO, StringIO
from django.shortcuts import HttpResponse,render,redirect
# 获取随机的样式颜色
def get_random():
    return random.randint(
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用 Django 内置的验证码工具 django-simple-captcha 。 安装 可以直接使用 pip 安装,命令如下: ``` pip install django-simple-captcha ``` 配置 在你的 settings.py 中添加以下配置: ``` INSTALLED_APPS = [ # ... 'captcha', # ... ] CAPTCHA_LENGTH = 4 # 验证码的长度 CAPTCHA_FONT_SIZE = 24 # 验证码字体大小 CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_dots',) # 噪点函数 CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge' # 验证码生成函数 ``` 使用 在你的表单页面中添加以下代码: ``` {% load captcha %} <form method="post"> {% csrf_token %} {% captcha %} <button type="submit">提交</button> </form> ``` 检验验证码 在表单提交后,可以通过 request.session.get('captcha') 来获取验证码,然后与用户输入的验证码进行比较,从而实现验证码校验。 完整示例 views.py ``` from django.shortcuts import render, redirect from django.contrib.auth import authenticate, login from django.contrib import messages from django.urls import reverse_lazy from django.views.generic import FormView from .forms import LoginForm class LoginView(FormView): template_name = 'login.html' form_class = LoginForm success_url = reverse_lazy('home') def form_valid(self, form): # 获取表单数据 username = form.cleaned_data['username'] password = form.cleaned_data['password'] captcha = form.cleaned_data['captcha'] # 验证验证码 if captcha != self.request.session.get('captcha'): messages.error(self.request, '验证码错误') return redirect(reverse_lazy('login')) # 验证用户名和密码 user = authenticate(username=username, password=password) if user is not None: if user.is_active: login(self.request, user) messages.success(self.request, '登录成功') return super().form_valid(form) else: messages.error(self.request, '该用户已被禁用') else: messages.error(self.request, '用户名或密码错误') return redirect(reverse_lazy('login')) ``` forms.py ``` from django import forms from captcha.fields import CaptchaField class LoginForm(forms.Form): username = forms.CharField(label='用户名', max_length=50) password = forms.CharField(label='密码', widget=forms.PasswordInput()) captcha = CaptchaField(label='验证码') ``` login.html ``` {% extends 'base.html' %} {% block content %} <h1>登录</h1> {% if messages %} {% for message in messages %} <div class="alert alert-{{ message.tags }}"> {{ message }} </div> {% endfor %} {% endif %} <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit" class="btn btn-primary mt-3">登录</button> </form> {% endblock %} ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天码一行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值