@Martijn Pieters прав. Но поскольку они указаны в https://docs.python.org/3.4/library/random.html :
Предупреждение. Псевдослучайные генераторы этого модуля не следует использовать в целях безопасности. Используйте os.urandom () или SystemRandom, если вам нужен криптографически безопасный генератор псевдослучайных чисел.
blockquote>, и целью этого является создание паролей, я предлагаю такой подход:
import string import random set = string.letters + string.digits + string.punctuation length = 20 password = ''.join( [ random.SystemRandom().choice( set) for _ in range( length) ] ) print( password)
Кто-нибудь может подтвердить, что это более безопасно?
Вот рабочее испытание для одного подхода:
from flask import Flask, render_template_string, session, request
import pandas as pd
app = Flask(__name__)
template = """
<!doctype html>
<input type="text" value="" name="my_filter" id="my_filter">
<div id="results">{{ data|safe }}</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
$('#my_filter').keyup(function() {
if ($(this).val().length >= 1) {
var requested_code = document.getElementById('my_filter').value;
$.ajax({
type: 'POST',
data: JSON.stringify({
'requested_code': requested_code
}),
contentType: 'application/json; charset=utf-8',
url: "{{ url_for('filter_html') }}",
success: function(resp) {
$("#results").html(resp);
}
});
}
});
</script>
</html>
"""
@app.route("/")
def table():
df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
session['df'] = df.values.tolist()
return render_template_string(template, data=df.to_html(index=False))
@app.route('/filter', methods=['GET', 'POST'])
def filter_html():
df = pd.DataFrame(session['df'], columns=['a', 'b'])
df = df[df['a'] == int(request.json.get('requested_code'))]
return df.to_html(index=False)
if __name__ == '__main__':
app.secret_key = 'hello'
app.run(debug=True)
По сути, добавьте функцию JQuery в блок input
, который ищет события keyup
. Однако они должны инициировать запрос AJAX к конечной точке URL во Flask, которая затем может обновить div "results"
. Могут быть более чистые способы сериализации данных, которые будут сохранены в сеансе; это просто для иллюстрации подхода.
По умолчанию session
в Flask довольно мало. Если вы попытаетесь сохранить объект, который слишком велик, чтобы уместиться, это не приведет к ошибке, проблема просто игнорируется. Вы захотите использовать flask-session
для хранения данных DF; в настоящее время вы отправляете все это в браузер, поэтому я предполагаю, что он не слишком большой.
Для тех, кто менее знаком с Flask, но работает с Pandas: вы можете запустить этот код и затем перейти к 127.0.0.1:5000
в вашем браузере. Числа 1, 2 или 3 действительны для ввода в поле поиска для взаимодействия с df, все остальное приводит к пустому df.