Как получить сообщение об ошибке от объекта
Я пытаюсь создать аутентификацию в моем проекте после входа в систему. Я создал свои модели и форму. Я хочу, чтобы пользователь получал сообщение об ошибке, если он не ввел правильный пин в моделях и успешный, если он ввел правильный пин. Я уже создал пин в своих моделях
class Data(models.Model):
name = models.CharField(max_length=100)
body = models.CharField(max_length=1000000)
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
other_name = models.CharField(max_length=200)
email = models.EmailField()
profile_image = models.ImageField(blank=True)
city = models.CharField(max_length= 100)
title = models.TextField(null=True, blank=True)
middlename = models.TextField(null=True, blank=True)
adreess = models.TextField(null=True, blank=True)
country = models.TextField(null=True, blank=True)
state = models.TextField(blank=True, verbose_name="Biography (Age, Language, Location...)")
pin = models.IntegerField()
available = models.TextField(null=True, blank=True)
checkings = models.TextField(null=True, blank=True)
savings = models.TextField(null=True, blank=True)
phone_number = models.TextField(null=True, blank=True)
first_his = models.TextField(null=True, blank=True)
second_history = models.TextField(null=True, blank=True)
third_history = models.TextField(null=True, blank=True)
last_history = models.TextField(null=True, blank=True)
newstate = models.TextField(null=True, blank=True)
def __str__(self):
return self.first_name
это мой HTML файл
<style>
h5{
color: red;
}
</style>
{% for message in messages %}
<h5> {{message}}</h5>
{% endfor %}
<form action="portfolio" method="POST" class="row g-3"></form>
{% csrf_token %}
<div class="col-md-12">
<label for="validationDefault02" class="form-label"></label>
<input type="text" name = 'pin' class="form-control" id="validationDefault02" value="" required>
</div>
<div class="col-12">
<button class="btn btn-primary" type="submit">Send</button>
</div>
</form>
и это мое мнение
@login_required(login_url = 'loginss')
def account(request): form = PortfolioForm() if request.method == 'POST': try: pin = Portfolio.objects.get(foo='bar') except Portfolio.DoesNotExist: pin = None context = {'form' : form} return render(request, 'account.html', context)
Поскольку вы не используете Form.py, вы должны сделать что-то вроде этого:
def account(request):
form = PortfolioForm()
context = {'form' : form}
if request.method == 'POST':
try:
pin = Portfolio.objects.get(foo='bar')
except Portfolio.DoesNotExist:
pin = None
context['error'] = 'Pin Not Found
return render(request, 'account.html', context)
<form action="portfolio" method="POST" class="row g-3"></form>
{% csrf_token %}
<div class="col-md-12">
<label for="validationDefault02" class="form-label"></label>
<input type="text" name = 'pin' class="form-control" id="validationDefault02" value="" required>
{% if error %}
<span style="color:red">{{error}}</span>
{% endif %}
</div>
<div class="col-12">
<button class="btn btn-primary" type="submit">Send</button>
</div>
</form>
Но вместо try/except, просто сделайте .filter().first()
- Если он не найден, то будет None, и вы можете использовать это в If .
- Нет потенциальных актуальных ошибок
def account(request):
form = PortfolioForm()
context = {'form' : form}
if request.method == 'POST':
pin = Portfolio.objects.filter(foo='bar').first()
if not pin:
context['error'] = 'Pin Not Found
return render(request, 'account.html', context)