You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中PIN验证成功消息不显示的问题求助

Django PIN验证成功消息不显示问题排查与修复

问题描述

在Django项目中实现登录后身份验证功能,已创建Data模型。需求是用户输入正确PIN码时显示成功消息,输入错误时显示错误消息,但目前仅错误消息能正常显示,成功消息无法出现。

相关代码

模型代码(models.py)

class Data(models.Model):
    name = models.CharField(max_length=100)
    body = models.CharField(max_length=1000000)
    first_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)  
    other_name = models.CharField(max_length=200)
    email = models.EmailField()
    profile_image = models.ImageField(blank=True)
    city = models.CharField(max_length= 100)
    title = models.TextField(null=True, blank=True)
    middlename = models.TextField(null=True, blank=True)
    adreess = models.TextField(null=True, blank=True)
    country = models.TextField(null=True, blank=True)
    state = models.TextField(blank=True, verbose_name="Biography (Age, Language, Location...)")
    pin = models.IntegerField()
    available = models.TextField(null=True, blank=True)
    checkings = models.TextField(null=True, blank=True)
    savings = models.TextField(null=True, blank=True)
    phone_number = models.TextField(null=True, blank=True)
    first_his = models.TextField(null=True, blank=True)
    second_history =  models.TextField(null=True, blank=True)
    third_history = models.TextField(null=True, blank=True)
    last_history = models.TextField(null=True, blank=True)
    newstate = models.TextField(null=True, blank=True)

    def __str__(self):
        return self.first_name 

视图代码(views.py)

def checkview(request):
    pin = request.POST['pin']

    if Data.objects.filter(name=pin).exists():
        messages.success(request, "You have registered successfully")
    else:
        messages.error(request, 'Account Suspended, Your Request To Transfer funds Has Been Declined. Contact Support for Help') 
        return redirect('account')

HTML模板代码

<div class="pagetitle">
    <h1>Pin Code Required to Complete Transfer Request</h1>
    <style>
      h8{
        color: red;
      }
    </style>
    {% for message in messages %}
    <h8> {{message}}</h8>
    {% endfor %}
    <form action = "checkview"  method="POST" autocomplete="on">
      {% csrf_token %}
    <!--Second name-->
    <div class="box">
      <label for="pin" class="fl fontLabel"> </label>
            <div class="fl iconBox"><i class="fa fa-user" aria-hidden="true"></i></div>
            <div class="fr">
                    <input type="text" name="pin" maxlength="4" 
           class="textBox">
            </div>
            <div class="clr"></div>
            {% if error %}
                <span style="color:red">{{error}}</span>
            {% endif %}
        </div>
        <!--Second name-->

       <!---Submit Button------>
                      
       <input type="Submit" value="Transfer">
                      
       <!---Submit Button-----&gt;

    </form>
</div>

问题原因与修复方案

1. 过滤字段错误

视图中使用Data.objects.filter(name=pin)查询,但模型中存储PIN码的字段是pin而非name,导致正确输入PIN时无法匹配到记录,成功消息根本不会被添加。同时,POST获取的pin是字符串类型,而模型中pin是IntegerField,需要做类型转换。

2. 成功分支缺少响应返回

错误分支有return redirect('account'),但成功分支没有返回任何HttpResponse对象,Django视图必须返回响应,否则请求流程异常,消息无法被渲染到页面。

修改后的视图代码

from django.shortcuts import redirect
from django.contrib import messages
from .models import Data

def checkview(request):
    # 用get避免KeyError,同时处理空输入
    pin_input = request.POST.get('pin')
    if not pin_input:
        messages.error(request, "请输入PIN码")
        return redirect('account')
    
    try:
        pin = int(pin_input)
        # 修正过滤字段为pin
        if Data.objects.filter(pin=pin).exists():
            messages.success(request, "验证成功,转账请求已完成")
            # 成功后重定向到目标页面,比如账户页
            return redirect('account')
        else:
            messages.error(request, '账户异常,转账请求已被拒绝,请联系客服协助') 
            return redirect('account')
    except ValueError:
        messages.error(request, "请输入有效的数字PIN码")
        return redirect('account')

额外优化建议

  • 确保Django消息框架已正确配置:
    • INSTALLED_APPS中包含django.contrib.messages
    • MIDDLEWARE中包含django.contrib.sessions.middleware.SessionMiddleware和django.contrib.messages.middleware.MessageMiddleware
  • 模板中可以给成功消息添加绿色样式,区分错误消息:
    {% for message in messages %}
        {% if message.tags == 'success' %}
            <h8 style="color: green;">{{message}}</h8>
        {% else %}
            <h8 style="color: red;">{{message}}</h8>
        {% endif %}
    {% endfor %}
    

内容的提问来源于stack exchange,提问作者Neo_77cyber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:55:29