flask13 use AJAX

AJAX (Asynchronous Javascript And XML)¸¦ »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇؼ­ ¾Ë¾Æ º»´Ù.
AJAX´Â XMLHttpRequest¸¦ ÄÚµå·Î ó¸® Çϱ⠶§¹®¿¡ Äڵ尡 º¹ÀâÇÏ´Ù. jQuery¸¦ »ç¿ëÇϸé Äڵ尡 °£°áÇØÁø´Ù.
¿©±â¼­´Â QueryString ¹æ½Ä°ú URLÀ» ÅëÇؼ­ ¼­¹ö·Î ¿äûÇÏ°Ú´Ù.

AJAX·Î QueryStringÀ» ÀÌ¿ëÇÑ ¹æ½Ä

Äõ¸®½ºÆ®¸µÀ» ¼­¹ö·Î º¸³»°í ¼­¹ö¿¡¼­ ÅؽºÆ®·Î °á°ú°ªÀ» ¹Þ´Â´Ù.

html ÆÄÀÏ
html

<input type="button" name="btn-test" id="btn-querystring_to_text" value="get, ¼­¹ö URI: /main/querystring_to_text" />

ÀÚ¹Ù½ºÅ©¸³Æ®

$("#btn-querystring_to_text").on("click", function () {
    ajax_get_querystring_to_text();
});
function ajax_get_querystring_to_text(){
    var URI = "/main/querystring_to_text"
    var PARAM1 = "?string_data="+"hello";
    var PARAM2 = "&int_data="+3;
    var URI = URI + PARAM1 + PARAM2

    var request = $.ajax({
        type: 'GET',
        url: URI,
        dataType: 'text', //response dataType
        timeout: 30000, //millisecond unit
        success: function(objs) {
            alert("ajax HTTP Åë½Å ¼º°ø");
             $("#response_result").text("ajax_get_querystring_to_text :" + objs);
        },
        error : function() {
            alert("ajax HTTP Åë½Å ½ÇÆÐ. °ü¸®ÀÚ¿¡°Ô ¹®ÀÇÇϼ¼¿ä.");
        }
    });
} //end of ajax_get_querystring_to_text

ÆÄÀ̽ã ÆÄÀÏ
@bp.route('/querystring_to_text', methods=['GET'])
def querystring_to_text():
    print('Request URL: http://127.0.0.1:8888/main/querystring_to_text')

    string_value = request.args.get('string_data')
    int_value = request.args.get('int_data')

    response = "success : " + string_value + " , " + int_value
    return response

AJAX ¿ë¾î ¼³¸í

type : POST ¶Ç´Â GET
url : ¿äû ¼­¹öÀÇ url
data : ¼­¹ö·Î º¸³¾ µ¥ÀÌÅÍ
async : µ¿±â ¶Ç´Â ºñµ¿±â ÁöÁ¤
timeout : ¹Þ±â ±â´Ù¸®´Â ½Ã°£À¸·Î ¹Ð¸® ¼¼ÄÁµå ´ÜÀ§.
contentType : º¸³»´Â µ¥ÀÌÅÍ Å¸ÀÔÀ¸·Î (request data type)
dataType : ¼­¹ö¿¡¼­ ¹Þ´Â µ¥ÀÌÅÍ Å¸ÀÔÀ¸·Î (response dataType)
success : ¼­¹ö·Î ¿äû ¼º°ø½Ã È£ÃâÇØ¾ß ÇÒ ÇÔ¼ö¸¦ ÁöÁ¤ÇÑ´Ù.
error : ¼­¹ö·Î ¿äû ½ÇÆнà ȣÃâÇØ¾ß ÇÒ ÇÔ¼ö¸¦ ÁöÁ¤ÇÑ´Ù.
jqXHR : $.ajax()¿¡ ÀÇÇØ ¹ÝȯµÇ´Â XMLHttpRequest ¿ÀºêÁ§Æ®ÀÇ »óÀ§ °´Ã¼ÀÌ´Ù.


Ŭ¶óÀ̾ðÆ®¿¡¼­ ¿äû(º¸³»±â)

Äõ¸®½ºÆ®¸µ ¹æ½ÄÀ¸·Î ÇÒ¶§´Â data¿Í contentTypeÀº ¼±¾ðÇÏÁö ¾Ê´Â´Ù.
url¿¡ µ¥ÀÌÅ͸¦ Æ÷ÇÔ½ÃÄÑ º¸³½´Ù.

contentTypeÀ» ¼±¾ðÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ  ¼±¾ðÇÑ´Ù.
contentType: 'text/html;charset=utf-8'

¹®ÀÚ¿­°ú Á¤¼ö°ª 2°³ÀÇ µ¥ÀÌÅÍ·Î º¸³¾¶§´Â ´ÙÀ½°ú °°ÀÌ º¸³½´Ù.
URL + "?key="+"°ª" + "&key1="+°ª;

/main/querystring_to_text?string_data=hello&int_data=3


¼­¹ö¿¡¼­ ÀÀ´ä(¹Þ±â)

ÆÄÀ̽㿡¼­´Â GET ¹æ½ÄÀ̹ǷΠrequest.args.get(key)·Î ¼­¹ö·Î ¿äûÇÑ °ªÀ» ±¸ÇÒ¼ö ÀÖ´Ù.

    string_value = request.args.get('string_data')
    int_value = request.args.get('int_data')

Ŭ¶óÀ̾ðÆ®¿¡ ÅؽºÆ® Çü½ÄÀ¸·Î ´Ù½Ã º¸³½´Ù.

    response = "success : " + string_value + " , " + int_value
    return response


Äõ¸®½ºÆ®¸µÀ¸·Î º¸³»±â, ¼­¹ö¿¡¼­ DB Á¢±ÙÈÄ , µ¥ÀÌÅÍ Å¬¶óÀ̾ðÆ®·Î º¸³»±â

html ÆÄÀÏ

html

<input type="button" name="btn-test" id="btn-get_query_to_json" value="get, ¼­¹ö URI:  /main/get_query_to_jsondb" />


ÀÚ¹Ù½ºÅ©¸³Æ®

$("#btn-get_query_to_json").on("click", function () {
    ajax_get_query_to_json();
});

function ajax_get_query_to_json(){
    //º¸³»±â : URI?Å°À̸§=°ª&Å°À̸§1=°ª1"
    //Çöó½ºÅ© ¹Þ±â : GET HTTP Method + reuest.args.get("Å°°ª")
    //data ¼Ó¼ºÀº »ç¿ë ÇÏÁö ¾Ê´Â´Ù.

    var URI = "/main/get_query_to_jsondb";
    var PARAMETER="?username=apple&userid=33";
    URI = URI + PARAMETER;

    $.ajax({
        type: 'GET',
        url: URI,
        // data:  data¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù.
        contentType: 'text/html;charset=utf-8',
        dataType: 'json',
        cache: false,
        async: true,
        timeout: 30000,

        success: function(objs) {
            alert("ajax ±â¹Ý HTTP Åë½Å ¼º°ø");
            console.log("objs=", objs);
            console.log("objs[0]=", objs[0]);
        },
        error : function(jqXHR) {
            alert("ajax HTTP Åë½Å ½ÇÆÐ. °ü¸®ÀÚ¿¡°Ô ¹®ÀÇÇϼ¼¿ä.");
            alert(jqXHR)
        }
    });
} //end of ajax_get_query_to_json

ÆÄÀ̽ã ÆÄÀÏ
@bp.route('/get_query_to_jsondb', methods=['GET'])
def get_query_to_jsondb():
    print('Request URL: http://127.0.0.1:8888/main/get_query_to_jsondb')

    client_username = request.args.get("username")
    client_userid = request.args.get("userid")

    row_list = model.User.query.filter(
        model.User.username == client_username,
        model.User.userid == client_userid).all()

    user_record = []
    for i, row in enumerate(row_list):
        print(f"{i} - row = {row.serialize}")
        user_record.append(row.serialize)

    response = json.dumps([user_record], default=str, ensure_ascii=False)
    return response, 201


Ŭ¶óÀ̾ðÆ®¿¡¼­ ¿äû(º¸³»±â)

Äõ¸®½ºÆ®¸µÀ¸·Î º¸³»¹Ç·Î ÅؽºÆ®·Î contentTypeÀ» ÅؽºÆ®·Î ÁöÁ¤ÇÑ´Ù.
contentType: 'text/html;charset=utf-8'

µ¥ÀÌÅÍ´Â URL°ú °°ÀÌ ÁöÁ¤ÇÑ´Ù.
/main/querystring_to_text?string_data=hello&int_data=3

ÀÀ´ä µ¥ÀÌÅÍ Å¸ÀÔÀº JSONÀ¸·Î ÁöÁ¤ÇÑ´Ù.
dataType: 'json'

¼­¹ö¿¡¼­ ÀÀ´ä(¹Þ±â)

µ¥ÀÌÅ͸¦ getÀ¸·Î ¹Þ¾Ò±â ¶§¹®¿¡ request.args.get ÇÔ¼ö·Î °ªÀ» ±¸ÇÑ´Ù.
    client_username = request.args.get("username")
    client_userid = request.args.get("userid")

model.User.query.filter ÇÔ¼ö·Î DB¿¡¼­ °ªÀ» °Ë»öÇÑ´Ù.

DBÀÇ °Ë»ö °á°ú °ªÀ» ¸®½ºÆ®¿¡ user_record ¸®½ºÆ®¿¡ Ãß°¡ÇÑ´Ù.

json.dumps·Î ¸®½ºÆ®ÀÇ °ªÀ» JSONÀ¸·Î º¯È¯ÇÑ´Ù.

URLÀ» ÅëÇØ ¼­¹ö·Î ¿äûÇϱâ

html ÆÄÀÏ
html

<p><label>¼­¹ö ¿äû ¹®ÀÚ¿­:</label> <input type = "text" id="input_value_string" placeholder = "°ø¹é ¾øÀÌ ¹®ÀÚ¿­À» ÀÔ·Â Çϼ¼¿ä." /></p>
<p><label>¼­¹ö ¿äû Á¤¼ö:</label> <input type = "number" id="input_value_int" placeholder = "°ø¹é ¾øÀÌ Á¤¼ö¸¦ ÀÔ·Â Çϼ¼¿ä." /></p>
<p><input type="button" value="¼­¹ö·Î Àü¼Û" id="btn-ajax_get_url">


ÀÚ¹Ù½ºÅ©¸³Æ®

$("#btn-ajax_get_url").on("click", function () {
    ajax_get_URL();
});

function ajax_get_URL(){
alert("ajax_get_URL.");
    var string_data = $("#input_value_string").val();
    var int_data = $("#input_value_int").val();

    var URI = "/main/ajax_url"
    var PARAM1 = "/" + string_data;
    var PARAM2 = "/" + int_data;

    var URI = URI + PARAM1 + PARAM2

    $.ajax({
        type: 'GET',
        url: URI,
        // data¾øÀ½ : URL ÆĶó¸ÞÅÍ·Î º¸³»±â ¶§¹®¿¡ ÁÖ¼®Ã³¸®ÇÑ´Ù.,
        contentType: 'text/html;charset=utf-8',
        dataType: 'text',

        cache: false,
        async: false,
        timeout: 30000,

        success: function(data) {
            alert("ajax url Åë½Å ¼º°ø");
            alert(data)
        },
        error : function(e) {
            alert("ajax HTTP Åë½Å ½ÇÆÐ. °ü¸®ÀÚ¿¡°Ô ¹®ÀÇÇϼ¼¿ä.");
            alert(e)
        }
    });
} // end of ajax_get_URL

ÆÄÀ̽ã ÆÄÀÏ
@bp.route('/ajax_url/<string_value>/<int:int_value>', methods=['POST', 'GET'])
def get_url(string_value, int_value):
    print('Request URL: http://127.0.0.1:8888/main/ajax_url')

    print(f"string value = {string_value}")
    print(f"int value = {int_value}")

    response = f"SUCCESS = {string_value}, {int_value}"
    return response

Ŭ¶óÀ̾ðÆ®¿¡¼­ ¿äû(º¸³»±â)

  • url = URI + "/" + "µ¥ÀÌÅÍ"
  • GET ¹æ½ÄÀ¸·Î ¿äûÀ» ÇÑ´Ù.
  • º¸³¾ contentTypeÀ» text·Î ¼³Á¤ : contentType: 'text/html;charset=utf-8'
  • URLÀ» ÀÌ¿ëÇϱ⠶§¹®¿¡ data ¼Ó¼ºÀº ÁÖ¼®Ã³¸®
  • ¹ÞÀ» µ¥ÀÌÅÍ Å¸ÀÔÀº 'text'·Î ÇÑ´Ù.
¼­¹ö¿¡¼­ ÀÀ´ä(¹Þ±â)

  • Çöó½ºÅ©¿¡¼­ ¶ó¿ìÆà º¯¼ö·Î ¹Þ´Â´Ù.
          '/url_ajax/<string_value>/<int:int_value>'

´Ù¿î·Îµå:
/templates/test.html
controller/main_controller.py

ajax_test.zip

Âü°í)
ajax Åë½Å ¹æ¹ý (QueryString)
https://gspkr.tistory.com/107

[spring] ajax ¸ÖƼÆÄÀÏ(MultipartFile) ¾÷·Îµå ó¸®
https://cheonfamily.tistory.com/6