Я делаю веб-страницу, как заказ еды в ресторане. Поэтому я включил форму, в которой покупатель должен заполнить форму, которая включает имя, номер стола, пароль и т. д., Чтобы заказать еду. Для этого я хочу сделать декоратор, чтобы клиент не мог напрямую перейти на другую страницу, не заполнив форму.
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
и добавьте этот декоратор в представления, где вы должны проверить, отправил ли пользователь форму.