PyTelegramBotAPI NameError: name 'p' is not defined Python(Django)
Я пишу телеграм бот, используя pytelegrambotapi. Я создал базу данных с помощью Python (django). Следующий код описывает вычисление площади прямоугольника. Сначала я написал бота, используя глобальную переменную. У меня проблема! Если только один пользователь использует бота, бот отвечает правильно. Если бот используется многими пользователями одновременно, бот смешивает ответы и возвращает неверный ответ. Я хочу решить эту проблему с помощью базы данных. Но потом я отредактировал код и сделал его таким(BOT.PY), и у меня возникла проблема с локальной переменной. Не могу понять где ошибка. Пожалуйста помогите :(
BOT.PY
...
...;
float_pattern = r'^\d{1,7}\.\d{1,2}$'
...
...
def p_first(message):
if message.text.isdigit() or re.match(float_pattern, message.text):
chat_id = message.chat.id
uid, _ = Profile.objects.get_or_create(
external_id=message.chat.id,
defaults={
'name': message.chat.username
}
)
Message(
profile=uid,
param1=message.text
).save()
p = float(message.text)
print('Parameter (p) from:', chat_id)
bot.send_message(message.chat.id, "Ajoyib, perimetr qabul qilindi!")
msg = bot.send_message(message.chat.id, "<b>2. "Now secondside: "</b>", parse_mode="html")
bot.register_next_step_handler(msg, height)
return p
else:
msg = bot.send_message(message.chat.id, "Nice!")
bot.register_next_step_handler(msg, p_first)
def height(message):
if message.text.isdigit() or re.match(float_pattern, message.text):
chat_id = message.chat.id
uid, _ = Profile.objects.get_or_create(
external_id=message.chat.id,
defaults={
'name': message.chat.username
}
)
Message(
profile=uid,
param2=message.text
).save()
h = float(message.text)
print('Parameter (h) from:', chat_id)
bot.send_message(message.chat.id, "Nice!" +f'{(str(final_result())} + ' is answer'
else:
msg = bot.send_message(message.chat.id, "Only number")
bot.register_next_step_handler(msg, height)
def final_result():
result = float(p_first(p)*height(h))
return result
NameError: name 'p' is not defined
Models.py
from django.db import models
class Profile(models.Model):
external_id = models.PositiveIntegerField(
verbose_name='User ID',
unique=True,
)
name = models.TextField(
verbose_name='User name',
null=True,
)
def str(self):
return f' ID: {self.external_id} | Username: {self.name}'
class Meta:
verbose_name = 'Profile'
class Message(models.Model):
profile = models.ForeignKey(
to='main.Profile',
verbose_name='Profile',
on_delete=models.PROTECT,
null=True,
)
text = models.TextField(
verbose_name='Text',
)
param1 = models.FloatField(
verbose_name='P',
default='0'
)
param2 = models.FloatField(
verbose_name='H',
default='0'
)