【问题标题】:Django make field optional that gets check by integrityDjango使字段可选,通过完整性检查
【发布时间】:2019-06-09 20:56:34
【问题描述】:

我想在我的注册页面上设置一个可选字段,这样只有在用户提供了这些信息时才会检查该字段的内容,如果没有,只需跳过数据完整性检查:

pubpgp = PGPKey.from_blob(request.POST['pubpgp'].rstrip("\r\n"))[0]

字段 pub pgp。但我不知道如何做到这一点,欢迎任何帮助。

models.py

pubpgp = models.TextField(verbose_name='Public RSA PGP Key - (ASCII-Armored)', blank=True, default='', max_length=3000)

views.py

def signup(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            pubpgp = PGPKey.from_blob(request.POST['pubpgp'].rstrip("\r\n"))[0]
            if pubpgp.key_algorithm == PubKeyAlgorithm.RSAEncryptOrSign:
                form.save()
                messages.add_message(request, messages.INFO, "Thanks for you Registration, you are now able to login.")
                return redirect(reverse('login'))
            else:
                messages.add_message(request, messages.INFO, "Only RSA based PGP keys are allowed.")
        else:
            return render(request, 'signup.html', {'form': form})
    else:
        form = RegistrationForm()
        args = {'form': form}
        return render(request, 'signup.html', args)

提前致谢

【问题讨论】:

  • 那么你是说如果参数pubpgp 没有 提供,那么直接重定向到login 视图?
  • 是的!正是,感谢阅读
  • 我注意到的一件事是,在执行 if pubpgp.key_algorithm == PubKeyAlgorithm.RSAEncryptOrSign: 的 else 之后,没有 return 语句可以呈现该消息。现在对于您的问题,代码看起来很正确。您能否详细说明how to accomplishes this?你得到的错误是什么?如果是关于 pubpgp 需要,可以尝试将null=True 加到pubpgp = models.TextField(verbose_name='Public RSA PGP Key - (ASCII-Armored)', blank=True, default='', max_length=3000)。我认为nullblank 通常是齐头并进的。

标签: django forms field


【解决方案1】:

如果您想重定向到 login 视图,如果未提供 pubpgp 参数,或者如果提供了参数并指示正确的算法,那么这应该只涉及对条件语句的小调整:

def signup(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            pubpgp = request.POST.get('pubpgp')
            # Allow redirect if pubpgp is empty or not empty but correct algorithm
            if not pubpgp or PGPKey.from_blob(pubpgp.rstrip("\r\n"))[0].key_algorithm == PubKeyAlgorithm.RSAEncryptOrSign:
                form.save()
                messages.add_message(request, messages.INFO, "Thanks for you Registration, you are now able to login.")
                return redirect(reverse('login'))
            else:
                messages.add_message(request, messages.INFO, "Only RSA based PGP keys are allowed.")
        else:
            return render(request, 'signup.html', {'form': form})
    else:
        form = RegistrationForm()
        args = {'form': form}
        return render(request, 'signup.html', args)

【讨论】:

  • 谢谢 :D 终于解决了。我正要为这个细节生气。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
相关资源
最近更新 更多