python - 如何制作一个装饰器来检查表单(任何自定义表单)是否在 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__'
解决方案
在您提交表单的视图中,您可以访问会话并设置form_submitted
为True
喜欢
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
并将此装饰器添加到您必须验证用户是否已提交表单的视图中。