Чтобы получить из файла json информацию, которую вы хотите сохранить (два списка), вы можете просто импортировать json, загрузить файл и запросить его как словарь.
Представьте, что у вас есть такой json:
{
"users": ["Bacon", "Eggs", "Toast"],
"passwords": ["Please don't do it this way though!", "runny", "buttered"]
}
Можно просто:
import json
path_to_json = "./stackoverflowexample.json"
with open(path_to_json, "r") as handler:
info = json.load(handler)
users = info["users"]
passwords = info["passwords"]
print("User 0 '{}', has password '{}'".format(users[0], passwords[0]))
Это очень небезопасный метод хранения паролей, он очень неэффективен, и вы ' Скорее всего, в какой-то момент возникнут проблемы с согласованностью.
Гораздо лучший способ хранения паролей будет в базе данных, который позволит вам более эффективно запрашивать информацию, которую вы хотели, а также получать и хэшировать пароли, когда вы их получаете, чтобы они не хранились как удобочитаемые для человека. строки.
Пример:
import sqlite3
import hashlib
import uuid
user_table_definition = """
CREATE TABLE users (
username TEXT,
salt TEXT,
hpassword TEXT
)"""
add_user_sql = "INSERT INTO users VALUES ('{}','{}','{}')"
connection = sqlite3.connect("./stackoverflowdb.db")
cursor = connection.cursor()
cursor.execute(user_table_definition)
# Add incoming user
username = "Bacon"
password = "This is a little better, but this is just an outline..."
salt = uuid.uuid4().hex
hashedpassword = hashlib.sha512((salt + password).encode("UTF-8")).hexdigest()
cursor.execute(add_user_sql.format(username, salt, hashedpassword))
# Check incoming user
username = "Bacon"
password = "This is a little better, but this is just an outline..."
row = cursor.execute("SELECT salt, hpassword FROM users WHERE username = '{}'".format(username)).fetchone()
salt, hpassword = row # Unpacking the row information - btw this would fail if the username didn't exist
hashedIncomingPwd = hashlib.sha512((salt + password).encode("UTF-8")).hexdigest()
if hashedIncomingPwd == hpassword:
print("Winner winner chicken dinner we have a live one!")
else:
print("No access for you")
Это только показывает вам строки, которые составляют ядро того, что вы хотите, вы должны переместить некоторые из этих строк в функции, вы не можете вызвать этот код дважды, потому что Стол уже должен быть создан и другие вопросы. Во-первых, вам не нужно использовать sqlite!
SQL - очень полезная вещь для изучения, и, учитывая, что ваш вопрос выглядит как хобби, я бы посоветовал разобраться с этим. Желаем удачи.
Чтобы быть УСПОКОИТЕЛЬНЫМ, каждый Запрос HTTP должен содержать достаточно информации отдельно, чтобы ее получатель обработал его, чтобы быть в полной гармонии с природой не сохраняющей состояние HTTP.
Хорошо, я добираюсь, та Аутентификация HTTP сделана автоматически на каждом сообщении - но как?
Да, имя пользователя и пароль отправляется с каждым запросом. Общепринятые методики, чтобы сделать так основная аутентификация доступа и аутентификация доступа обзора . И да, соглядатай может получить учетные данные пользователя. Можно было бы таким образом зашифровать все отправленные данные и полученное использование Безопасность транспортного уровня (TLS) .
это было бы плохо, чтобы иметь сервис REST, скажем, / сессия, которая принимает ПОЛУЧИТЬ запрос, куда Вы передали бы в имени пользователя/пароле как часть запроса и возвратили бы маркер сессии, если бы аутентификация была успешна, который мог бы быть затем передан наряду с последующими запросами? Это имеет смысл с точки зрения REST, или это упускает суть?
Это не было бы УСПОКОИТЕЛЬНО , так как это несет состояние, но это однако довольно распространено, так как это - удобство для пользователей; пользователь не должен входить в систему каждый раз.
то, Что Вы описываете в "маркере сессии", обычно упоминается как cookie входа в систему. Например, при попытке войти в свою учетную запись Yahoo! существует флажок, который говорит, "сохраняют меня, вошел в систему в течение 2 недель". Это по существу говорит (в Ваших словах), "поддерживают мой маркер сессии в течение 2 недель, если я вхожу в систему успешно". Веб-браузеры отправят такие cookie входа в систему (и возможно другие) с каждым Запросом HTTP, который Вы просите, чтобы это сделало для Вас.
Сервису REST весьма свойственно потребовать аутентификации для каждого Запроса HTTP. Например, Amazon S3 требует, чтобы каждый запрос имел подпись, которая получена на основании удостоверений пользователя, точный запрос для выполнения, и текущее время. Эту подпись легко вычислить на стороне клиента, может быть быстро проверена сервером и имеет ограниченное применение для взломщика, который прерывает его (так как это основано на текущем времени).
Хорошо, я добираюсь, та Аутентификация HTTP сделана автоматически на каждом сообщении - но как?
"Авторизация": HTTP-заголовок отправляет клиентом. Или основной (простой текст) или обзор.
это было бы плохо, чтобы иметь сервис REST, скажем, / сессия, которая принимает ПОЛУЧИТЬ запрос, куда Вы передали бы в имени пользователя/пароле как часть запроса и возвратили бы маркер сессии, если бы аутентификация была успешна, который мог бы быть затем передан наряду с последующими запросами? Это имеет смысл с точки зрения REST, или это упускает суть?
вся эта мысль о сессии состоит в том, чтобы сделать с сохранением информации приложения с помощью протокола без сохранения информации о состоянии (HTTP) и немой клиент (веб-браузер) путем поддержания состояния на стороне сервера. Одно из остальных, которые принципы "Каждый ресурс, является исключительно адресуемым использованием универсального синтаксиса для использования в ссылках гиперсреды" . Переменные сеанса - что-то, к чему нельзя получить доступ через URI. ДЕЙСТВИТЕЛЬНО УСПОКОИТЕЛЬНОЕ приложение поддержало бы состояние на стороне клиента, отправив все необходимые переменные HTTP, предпочтительно в URI.
Пример: поиск с разбиением на страницы. У Вас был бы URL в форме
http://server/search/urlencoded-search-terms/page_num
, Это, имеет много общего с bookmarkable URL
Я думаю, что Ваше предложение в порядке, если Вы хотите управлять клиентским временем жизни сессии. Я думаю, что Архитектура RESTful поощряет Вас разрабатывать приложения не сохраняющие состояние. Как @2pence записал "каждый Запрос HTTP, должен содержать достаточно информации отдельно, чтобы ее получатель обработал его, чтобы быть в полной гармонии с природой не сохраняющей состояние HTTP" .
Однако не всегда, который имеет место, иногда приложение должно сказать, когда клиент входит в систему или выходит из системы и поддержать ресурсы, такие как блокировки или лицензии на основе этой информации. Посмотрите, что мой продолжать вопрос для примера такого случая.
Нет, это не упущение. Google's ClientLogin работает точно так же, за тем примечательным исключением, что клиенту дается указание перейти к "/session", используя ответ HTTP 401. Но это не создает сессию, а только создает способ для клиентов (временно) аутентифицировать себя, не передавая учетные данные в открытом виде, и для сервера, который может контролировать действительность этих временных учетных данных по своему усмотрению.