передача вложенного словаря Python в шаблон колбы и его динамическая загрузка в зависимости от выбора ключей словаря - PullRequest
0 голосов
/ 11 сентября 2018

У меня проблемы с решением этой проблемы. Я перехожу к следующему вложенному словарю Python в шаблон Flask.

dict= {'Endpoint': {'Unauthorized access': ['Secure administration', 'Strong authentication', 'Secure web interface', 'Secure root of trust'], 'Privilege escalation': ['Secure administration', 'Secure software'], 'Data disclosure': ['Secure administration'], 'DoS': ['Strong authentication', 'Protected memory', 'Intrusion prevention', 'Secure hardware'], 'Brute force': ['Strong authentication'], 'Exploitation of vulnerabilities': ['Secure updates', 'Secure software'], 'Code injection': ['Secure updates', 'Secure software'], 'Communication eavesdropping': ['Secure communications'], 'Replay attacks': ['Secure communications'], 'Spoofing': ['Secure communications'], 'Communication DoS': ['Secure communications', 'Intrusion prevention'], 'Alteration of communications': ['Secure communications'], 'Malwares': ['Intrusion prevention'], 'Exploitation of insecure web interface': ['Secure web interface'], 'Man-in-the-middle': ['Secure web interface'], 'Data breach': ['Secure storage'], 'Lack of compliance': ['Regulatory compliance'], 'On-chip attacks': ['Secure root of trust']}}

вот так выглядит шаблон:

enter image description here

Таким образом, исходя из выбора первого столбца (допускается несколько вариантов выбора) и после нажатия пользователем следующей кнопки, во втором столбце должен быть создан новый список выбора, содержащий значения ключей вложенного словаря. Затем на основе выбора пользователем второго столбца списки значений, которые соответствуют ключам выбранных проблем безопасности, должны быть представлены в третьем столбце.

Это код в шаблоне

<table class="table table-hover">
        <thead>
            <tr>
              <th scope="col">Attack vector (component)</th>
              <th scope="col">Security issue</th>
              <th scope="col">Security features</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td scope='row'>
                    <select multiple class="form-control col-5" id="firstColumn" >
                    {% for key, value in dict.items() %}
                        <option value={{ key }}>{{ key }}</option>
                    </select>
                    <button onclick="myFunction(1,{{ value }})">Next</button>
                </td>
                    {% endfor %}
                <td>
                    <select multiple class="form-control col-5" id="secondColumn" style="display: none;">
                    </select>

                </td>
                <td id="solution"></td>
                {#This code for the third column, which I will do after I get the second column right#}

            </tr>


        </tbody>
    </table>

function myFunction(type,data) {

{#this if statement to indicate which next button is pressed#}
    if (type==1){
        var selected = $('#firstColumn').val();


        var secondColumn = document.getElementById('secondColumn');
        for (var i in data.keys){
            secondColumn .options[ secondColumn .options.length]= new Option("<option value="+i+">"+i+"</option>");
                            }
        $("#secondColumn").show();
                }

    if (type==2) {
        {#This code for the third column, which I will do after I get the second column right#}
                }

                            }

но когда я нажимаю кнопку, только второй столбец и выбор становится видимым, но пустым.

Мне кажется, что для этого не нужно отправлять новый запрос на сервер, потому что все можно получить непосредственно из переданного словаря.

...