Итак, я работаю над проектом, в котором участвуют три виртуальные машины, на которых работает Ubuntu 18. Одна виртуальная машина - это внешний интерфейс, имеющий страницу входа и регистрации. Тогда у нас есть DMZ, которая является RabbitMQ. Я бэк-энд работает MySQL. Внешний интерфейс должен войти в систему с именем пользователя и паролем или либо зарегистрировать имя пользователя и пароль, и мой код должен иметь возможность аутентифицировать пользователя или зарегистрировать нового пользователя.
Со своей стороны, я использую Python MySQL разъем. Когда я запустил код до того, как интерфейс сделал что-нибудь, документ показал, что он слушает rabbitmq, готовый к использованию. Когда я запускал его, пользователь внешнего интерфейса попытался зарегистрировать нового пользователя, чтобы получить данные в RabbitMQ, и я смог использовать эти данные из RabbitMQ, однако я не смог прочитать какие-либо данные, потому что терминал продолжал давать мне ошибка при запуске моего Python3 кода ниже. Ошибка была AttributeError: __enter__
. Я что-то получаю, но не могу прочитать из-за этой ошибки. Я попробовал поискать в Google проблему, и я не мог понять, почему.
Кстати, если вы видите письмо b
, написанное перед некоторыми из одинарных кавычек, я был вынужден вставить это туда, так как я получил ошибки о необходимости строки байтов, тогда я наконец получил ошибку атрибута после исправления тех.
import pika
import time
import mysql.connector
credentials=pika.PlainCredentials('rabbitmq-test', 'test')
parameters=pika.ConnectionParameters('192.168.1.48',
5672,
'/',
credentials)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
channel.queue_declare(queue='user-test')
cnx = mysql.connector.connect(user='backendtest', password='NOTweak$_@123!', host='192.168.1.45', port='3306', database='back_end_database')
cursor = cnx.cursor()
def __enter__(self):
return self
def login(emailaddress, password):
authquery=b"SELECT password FROM DB_auth WHERE email='" + emailaddress + b"';"
with cursor.execute(authquery):
row=cursor.fetchone()
try:
passwd=row[0]
if password==passwd:
return "true"
else:
return "false"
except TypeError:
return "false"
def registeruser(emailaddress, password, firstname, lastname):
addcredentialsquery="SELECT COUNT(*) FROM DB_add;"
with cursor.execute(addcredentialsquery):
row=cursor.fetchone()
count=row[0]+1
registerquery="INSERT INTO DB_add VALUES (" + str(count) + ",'" + emailaddress + "','" + password + "','" + firstname + "','" + lastname + "';"
try:
cursor.execute(registerquery)
connection.commit()
return "true"
except pyodbc.IntegrityError:
return "false"
def loginrequest(ch, method, props, body):
emailaddress = body.split(b',')[0]
password = body.split(b',')[0]
response = login(emailaddress, password)
if response=='true':
global email
email=emailaddress
ch.basic_publish(exchange='', routing_key=props.reply_to, properties=pika.BasicProperties(correlation_id = props.correlation_id), body=str(response))
ch.basic_ack(delivery_tag=method.delivery_tag)
def registerrequest(ch, method, props, body):
emailaddress = body.split(',')[0]
password = body.split(',')[1]
firstname = body.split(',')[2]
lastname = body.split(',')[3]
response = registeruser(emailaddress, password, firstname, lastname)
ch.basic_publish(exchange='', routing_key=props.reply_to, properties=pika.BasicProperties(correlation_id = props.correlation_id), body=str(response))
ch.basic_ack(delivery_tag=method.delivery_tag)
channel.basic_qos(prefetch_count=1)
channel.basic_consume(queue='user-test', on_message_callback=loginrequest)
print(" [x] Awaiting login requests")
channel.basic_consume(queue='user-test', on_message_callback=registerrequest)
print(" [x] Awaiting registration requests")
channel.start_consuming() ```