Можно ли использовать jQuery, чтобы сделать таблицу панд фильтруемой / доступной для поиска?

@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)

Кто-нибудь может подтвердить, что это более безопасно?

0
задан jrg 16 January 2019 в 21:05
поделиться

1 ответ

Вот рабочее испытание для одного подхода:

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.

0
ответ дан roganjosh 16 January 2019 в 21:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: