Django не хочет возвращать ошибки
Пытаюсь ввести ключ, которого нету в массиве keys, froms.py возвращает мне is_valid() = False но не отображает ошибки в HTML файле. Буду рад помощи.
views.py
from django.shortcuts import render, redirect
from django.http import HttpResponse
from .forms import TicketsForm
from django.views.generic import View
import requests
from .models import Tickets
# Create your views here.
class Registration(View):
form = TicketsForm()
def get(self, request):
return render(request, 'registration/registration.html', {'form': self.form})
def post(self, request):
bound_form = TicketsForm(request.POST)
if bound_form.is_valid():
new_tag = bound_form.save()
return redirect(
'https://oauth.vk.com/authorize?client_id=7363479%20&display=page&redirect_uri=http://127.0.0.1:8000/callback/{}&scope=friends&response_type=code&v=5.103'.format(new_tag.key))
else:
print(self.form.errors)
return render(request, 'registration/registration.html', {'form': self.form})
def callback(request, key):
if request.method == 'GET':
code = request.GET['code']
req = requests.get('https://oauth.vk.com/access_token?client_id=7363479&client_secret=EFMBvY8AJJXmULB5IbtO&redirect_uri=http://127.0.0.1:8000/callback&code='
+ code)
print(req.text)
q = Tickets.objects.all().get(key=key)
print(q.name)
else:
pass
HTML
{%extends 'base/base.html'%}
{% block title %}
WebTickets
{% endblock %}
{% block content %}
<div class="col-md-8 order-md-1 offset-4 mt-5">
<h1>Регистрация пригласительного</h1>
<form action="{% url 'registration' %}" class="mt-3" method="post">
{% csrf_token %}
{{form.errors}}
<div class="form-group mt-3">
<label for="name">Имя</label>
{{ form.name }}
<small class="form-text text-muted">Укажите Ваше настоящее имя!</small>
<div class="invalid-feedback" style="width: 100%;">
Your username is required.
</div>
<div class="form-group mt-3">
<label for="name">Фамилия</label>
{{ form.surname }}
<small class="form-text text-muted">Укажите Ваше настоящую фамилию!</small>
<div class="invalid-feedback" style="width: 100%;">
Your username is required.
</div>
</div>
<div class="form-group mt-3">
<label for="name">Возраст</label>
{{ form.age }}
<small class="form-text text-muted">Укажите Ваше настоящий возраст!</small>
<div class="invalid-feedback" style="width: 100%;">
Your username is required.
</div>
<div class="form-group mt-3">
<label for="name">Ключ активации</label>
{{ form.key }}
<small class="form-text text-muted">Вы должны были получить его от друга</small>
{{ form.key.errors }}
{% for error in form.key.errors %}
<div class="alert alert-danger" role="alert">
{{error}}
</div>
{%endfor%}
</div>
<div class="form-group mt-3">
<label for="name">Email</label>
{{ form.email }}
<small class="form-text text-muted">На Ваш E-mail будет выслан пригласительный</small>
<div class="invalid-feedback" style="width: 100%;">
Your username is required.
</div>
</div>
<div class="form-group mt-3">
<label for="name">Имя пригласившего</label>
{{ form.who_invite_name }}
<small class="form-text text-muted">Укажите настоящие имя!</small>
<div class="invalid-feedback" style="width: 100%;">
Your username is required.
</div>
</div>
<div class="form-group mt-3">
<label for="name">Фамилия пригласившего</label>
{{ form.who_invite_surname }}
<small class="form-text text-muted">Укажите настоящую фамилию!</small>
<div class="invalid-feedback" style="width: 100%;">
Your username is required.
</div>
</div>
{% for errors in form.key.errors %}
{{ errors }}
{% endfor %}
<button class="btn btn-primary btn-lg btn-block mt-5 col-6" type="submit">
Зарегистрировать пригласительный
</button>
</form>
</div>
{% endblock %}
models.py
from django.db import models
# Create your models here.
class Tickets(models.Model):
name = models.CharField(max_length=150)
surname = models.CharField(max_length=150)
age = models.IntegerField()
key = models.CharField(max_length=20, unique=True)
email = models.EmailField(max_length=254, unique=True)
token = models.CharField(max_length=100)
who_invite_name = models.CharField(max_length=150)
who_invite_surname = models.CharField(max_length=150)
def __str__(self):
return self.name + ' ' + self.surname
forms.py
from django import forms
from .models import Tickets
from django.core.exceptions import ValidationError
from django.core.mail import EmailMessage
keys = ['1231231','123123','123']
class TicketsForm(forms.ModelForm):
class Meta:
model = Tickets
fields = ['name', 'surname', 'age', 'key', 'email', 'who_invite_name', 'who_invite_surname']
widgets = {
'name': forms.TextInput(attrs={'class': 'form-control col-6', 'placeholder' : 'Ангелина'}),
'surname': forms.TextInput(attrs={'class': 'form-control col-6', 'placeholder': 'Адамович'}),
'age': forms.NumberInput(attrs={'class': 'form-control col-6', 'placeholder': '16'}),
'key': forms.TextInput(attrs={'class': 'form-control col-6', 'placeholder': '123456'}),
'email': forms.TextInput(attrs={'class': 'form-control col-6', 'placeholder': '[email protected]'}),
'who_invite_name': forms.TextInput(attrs={'class': 'form-control col-6', 'placeholder': 'Максим'}),
'who_invite_surname': forms.TextInput(attrs={'class': 'form-control col-6', 'placeholder': 'Орлов'}),
}
def clean(self):
new_key = self.cleaned_data['key'].lower()
if Tickets.objects.filter(key__iexact=new_key).count():
raise ValidationError('Этот ключ уже активирован!')
if new_key in keys:
# text = "Ваша ссылка на пригласительный: https://webticks.herokuapp.com/{}/".format(new_key)
# email = EmailMessage('Ваш билет активирован!', text, to=[self.data['email']])
# email.send()
return new_key
raise ValidationError('Этот Ключ недействителен!')
def save(self):
new_ticket = Tickets.objects.create(
name=self.cleaned_data['name'],
surname=self.cleaned_data['surname'],
age=self.cleaned_data['age'],
key=self.cleaned_data['key'],
email=self.cleaned_data['email'],
who_invite_name=self.cleaned_data['who_invite_name'],
who_invite_surname=self.cleaned_data['who_invite_surname'],
)
return new_ticket