首页 > 解决方案 > 如何制作一个装饰器来检查表单(任何自定义表单)是否在 django 中提交?

问题描述

我正在制作一个网页,比如在餐厅点餐。所以我附上了一张表格,顾客必须填写表格,其中包括姓名、桌号、密码等才能订购食物。为此,我想制作一个装饰器,以便客户在不填写表格的情况下不能直接转到另一个页面。

from django import forms
from order.models import LoginModel
from django.core import validators
from django.core.validators import MinValueValidator,MaxValueValidator
def check_password(value):
    if value != 'onetofour':
        raise forms.ValidationError("Invalid Password")
class LoginForm(forms.ModelForm):
    username = forms.CharField(max_length=128)
    Table_number = forms.IntegerField(validators=[MinValueValidator(1),MaxValueValidator(4)])
    password = forms.CharField(widget = forms.PasswordInput,validators[check_password,])
    class Meta:
        model = LoginModel
        fields = '__all__'

标签: pythondjango

解决方案


在您提交表单的视图中,您可以访问会话并设置form_submittedTrue喜欢

request.session['form_submitted'] = True

然后创建一个装饰器

def check_form_submitted(func):
    def wrap(request, *args, **kwargs):
        if not request.session.get('form_submitted'):
            # raise 404 ?
        return func(request, *args, **kwargs)
    return wrap

并将此装饰器添加到您必须验证用户是否已提交表单的视图中。


推荐阅读