request..args.get ничего не хранит - PullRequest
0 голосов
/ 21 января 2019

У меня есть следующий код.Этот код предназначен для получения пользовательского ввода и обработки в Python.Все они должны работать на одной веб-странице.

Я перепробовал все возможные функции в flask.request.

Внутри файла python,

app.route("/",methods=['GET','POST'])
def homepage():
    return render_template('index.html')

@app.route("/detection",methods=['GET'])
def detections():
    code=request.args.get('code',default='',type=str)
    print(code)
    ide=Lang_Dec(code)
    lang=ide.get_lang()
    print(lang)
    return jsonify({'html':lang})

Внутриhtml файл,

<body>
        <div class="container">
            <div class="row">
                <div class="col-lg-8">
                        <textarea class="codemirror-textarea" id='code'></textarea>
                        <button type="button" class="btn btn-primary btn-lg" id='butt'>Guess the function!</button>
                </div>
                <div class="col-lg-4">
                    <div class="card" >
                        <h5 class="card-header">Detected Language</h5>
                        <div class="card-body">
                            <h6 class="card-title" id='lang'></h6>
                            <p class="card-text">Percentages</p>
                        </div>
                    </div>
                    <div class="card text-white bg-dark mb-3" >
                            <h5 class="card-header">IDE OUTPUT</h5>
                            <div class="card-body">
                                <p class="card-text" id='ide'></p>
                            </div>
                    </div>
                </div>
            </div>
        </div>



        <script>
            $(document).ready(function(){
                var code = $(".codemirror-textarea")[0];
                var editor = CodeMirror.fromTextArea(code, {
                    lineNumbers : true,
                    theme : "duotone-dark",
                });
            });
        </script>

        <script>
            $(document).ready(function(){
                $('#butt').click(function(){
                    var code=$('#code').val();
                    $.ajax({
                        url:"/detection",
                        type: "get",
                        data:{code:code},
                        success:function(response){
                            $('#lang').html(response.html);
                        },
                        error: function(xhr){
                            //do smtg
                        }
                    });
                });
            });
        </script>
    </body>

Предполагается, что Python получает пользовательский ввод от textarea, но оказывается, что скрипт Python получает только -.

1 Ответ

0 голосов
/ 22 января 2019

Это не проблема Python или Flask, вы не заключили текстовое поле в форму, а в документации CodeMirror предлагается следующее (выделено мной):

CodeMirror.fromTextArea (textArea: TextAreaElement,? Config: object)

Этот метод предоставляет другой способ инициализации редактора.Он принимает узел DOM textarea в качестве первого аргумента и необязательный объект конфигурации в качестве второго.Он заменит текстовое поле на экземпляр CodeMirror и подключит форму этого текстового поля (если оно есть), чтобы содержимое редактора помещалось в текстовое поле, когда форма представленный .Текст в текстовой области будет предоставлять содержимое для редактора.

Попробуйте и подтвердите это с помощью простой формы:

<form action='detection'>
    <textarea id='code' name='code'></textarea>
    <button type="submit">Go!</button>
</form>

Служите локально, отправляя форму с произвольным текстомinput выдает следующее:

127.0.0.1 - - [21 / Jan / 2019 22:50:04] «GET / обнаружения? код = dfgdfgdfgggggggggg HTTP / 1.1»

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

Так что быстрое и грязное исправлениечтобы ваш код выглядел так:

<script>
    $(document).ready(function(){
        var code = document.getElementById('code');
        var editor = CodeMirror.fromTextArea(code, {
            lineNumbers : true,
            theme : "duotone-dark",
        });
       $('#butt').click(function(){
            editor.save(); // this is where the textarea content gets updated
            var c=$('#code').val();
            $.ajax({
                url:"/detection",
                type: "get",
                data:{code:c},
                success:function(response){
                    $('#lang').html(response.html);
                },
                error: function(xhr){
                    //do smtg
                }
            });
        });
    });
</script>
...