Всем привет,
Я использую Python для создания пользователей через API Discourse. Запрос на создание пользователя возвращает успешный ответ, но я сталкиваюсь с проблемой: атрибут active в ответе всегда равен false, хотя я явно устанавливаю его в true в полезной нагрузке. Атрибут confirmed установлен в true, и с ним всё работает корректно.
Вот код:
import csv
import requests
import json
from datetime import datetime
# Данные API Discourse
discourse_url = "https://forum.hobiguru.com/" # Замените на ваш URL Discourse
api_key = "your-api-key" # Замените на ваш ключ API Discourse
api_username = "system" # Имя пользователя администратора
# Заголовки запроса
headers = {
"Api-Key": api_key,
"Api-Username": api_username,
"Content-Type": "application/json"
}
# Функция для создания пользователя
def create_user(username, name, email, password, bio, location, confirmed, active, join_date):
url = f"{discourse_url}/users.json"
join_date_str = join_date.strftime('%Y-%m-%dT%H:%M:%SZ')
payload = {
"name": name,
"email": email,
"password": password,
"username": username,
"active": True, # По умолчанию устанавливаем active в True
"confirmed": True, # По умолчанию устанавливаем confirmed в True
"created_at": join_date_str
}
print(f"\nURL запроса: {url}")
print(f"Заголовки запроса: {json.dumps(headers, indent=2)}")
print(f"Полезная нагрузка запроса: {json.dumps(payload, indent=2)}")
response = requests.post(url, json=payload, headers=headers)
if response.status_code == 200:
response_json = response.json()
if response_json.get("success"):
print(f"Успешное создание пользователя: {json.dumps(response_json, indent=2)}")
else:
print(f"Не удалось создать пользователя. Причина: {response_json.get('message')}")
print(f"Ошибки: {json.dumps(response_json.get('errors'), indent=2)}")
else:
print(f"Запрос не выполнен: {response.status_code}, {response.text}")
# Чтение пользователей из CSV-файла
with open('input_users.csv', mode='r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
# Извлекаем данные пользователя из строки
create_user(row['Username'], row['Name'], row['Email'], row['Password'], row['Bio'], row['Location'], row['Confirmed'] == 'TRUE', row['Active'] == 'TRUE', datetime.strptime(row['Join Date'], '%Y-%m-%dT%H:%M:%SZ'))
Вот что выводится:
Запрос на создание пользователя
{'name': 'Goran', 'email': 'bla+blaaa@gmail.com', 'password': 'P@ssword!23', 'username': 'goran12', 'active': True, 'confirmed': True, 'created_at': '2024-11-04T10:20:34Z'}
URL запроса: https://forum.hobiguru.com/users.json
Заголовки запроса:
{
"Api-Key": "d9---------------e564d65d9b5a3",
"Api-Username": "system",
"Content-Type": "application/json"
}
Полезная нагрузка запроса:
{
"name": "Goran",
"email": "'bla+blaaa@gmail.com",
"password": "P@ssword!23",
"username": "goran12",
"active": true,
"confirmed": true,
"created_at": "2024-11-04T10:20:34Z"
}
Ответ:
Полный ответ: {
"success": true,
"active": false,
"message": "Va\u0161 ra\u010dun je aktiviran i spreman za kori\u0161tenje."
}
Запрос выполнен успешно, пользователь создан:
{'success': True, 'active': False, 'message': 'Vaš račun je aktiviran i spreman za korištenje.'}
Проблема:
• Несмотря на передачу "active": True в полезной нагрузке, атрибут active в ответе всегда равен false. При просмотре пользователей в панели администратора Discourse я не могу найти их.
• API возвращает success: true, но пользователь, похоже, не полностью активирован.
Вопросы:
-
Не упускаю ли я что-то в своём запросе, что может привести к неправильной установке атрибута
active? -
Существуют ли в API Discourse какие-либо специфические условия, которые переопределяют атрибут
active, даже если он явно установлен вtrue?
Буду очень признателен за любые разъяснения или советы!

