Web

    [Jquery] Barchart 가로-세로 변환

    var myBarChart3 = new Chart(ctx3, { **type**: 'bar', // type : 'horizontalBar', data: { labels: StasticsJSON.CustomQueryStat.TypeName.slice(0,5), datasets: [{ label: "Count", backgroundColor: "#4e73df", hoverBackgroundColor: "#2e59d9", borderColor: "#4e73df", data: StasticsJSON.CustomQueryStat.TypeCount.slice(0,5), }], }, options: { maintainAspectRatio: false, layout: { padding: { left: 10, righ..

    [Jquery] 특정 클래스 요소 전부 가져와서 .each 문에서 데이터 뽑아내기

    function MakeSelectItemList(){ var ret = [] $('.StatItemSelect').each(function(index,item){ ret.push($(this).find('.card-body').text()) }); return ret; }; html 내에서 ".StatItemSelect" 클래스를 가진 모든 요소를 가져오게되면 제이쿼리 객체 자료형을 가지기 때문에 forEach 등을 사용할 수 없다. . .each 함수를 이용하면 배열에서 각 항목을 가져오는 것 처럼 반복문 내에서 항목들을 분리할 수 있는데, 이때 item 변수를 사용하면 html 태그가 나오기 때문에 제이쿼리 객체로 사용이 불가능하다. $(this) 키워드를 사용하면 제이쿼리 객체로 가져오기 때문에 ..

    [flask] Jquery 이용한 Post 전송시 return 으로 페이지 받기 (render_template,redirect 등)

    가끔 jquery를 이용해 post 데이터를 전달 할 때 , flask 서버에서 페이지를 반환해줘야 하는 경우가 있다. $.ajax나 $.post등을 이용하는 경우에 페이지가 자동으로 전환되지 않음 따라서 success 조건에서 별도로 페이지를 새로고침 하거나 다른곳으로 연결해줘야함 이 경우 flask의 반환값이 필요한 경우에는 해당 반환을 무시하는 경우가 왕왕 생긴다. ex : flash 메시지 반환이 필요한 경우 flask에서 반환해준 flash 메시지는 세션에 저장되어 사용됨. 클라이언트 사이드의 자바스크립트는 세션에 접근할 수 없기 때문에 해당 값을 알 수 없음 따라서 페이지 자체를 새로 랜더하면서 세션에 접근하여 flash 메시지를 받아와야함. 그래서 보통 이런경우는 반환 메시지를 따로 보내고,..

    [flask] flask + jira API

    2종류가 있다. JIRA python library : https://github.com/pycontribs/jira atlassian-python-api : https://github.com/atlassian-api/atlassian-python-api 1번은 JIRA 만을 사용하기 위해 만들어진 라이브러리고, 2번은 atlassian 자체를 사용하면서 그 중에 JIRA API를 쓸 수 있다. 두 라이브러리 간 사용법 자체는 크게 차이가 없어보임. jira만 쓸꺼니까 일단 1번으로 해본다. JIRA 서버 연결 JIRA 서버를 새로 만들어서 연결하는게 아닌, 기존 서버에 연결해서 사용하는게 목적이다. from jira import JIRA jac = JIRA('',auth=('username','pass..

    [flask-python] Flask 서버 웹소켓, 웹페이지 요청 로그 비활성화 + logging

    socketio = SocketIO(logger=False,engineio_logger=False) 웹소켓 - logger, engineio_logger 모두 False 로 변경시 웹소켓 로그 꺼짐 import logging log = logging.getLogger('werkzeug') log.setLevel(logging.ERROR) app.run() 실행전에 log 변수에 대해 위와같이 설정하면 flask werkzeug wsgi 로그가 에러를 제외하고는 출력되지 않음. logging옵션은 CRITICAL,ERROR,WARNING,INFO,DEBUG 등이 있다. 플라스크의 경우 기본수준은 WARNING으로 되어있고, werkzeug는 INFO 레벨로 되어있는듯. CRITICAL ~ DEBUG 순서로..

    REST API 테스트 도구 - ARC

    rest API 테스트 도구 https://install.advancedrestclient.com/install Advanced REST Client install.advancedrestclient.com @bp.route('/addTaskAPI.wt',methods=['POST']) # @CheckLogin def post(): data = request.get_json() return jsonify(data) 그 다음, ARC에서 method와 header, body 세팅 후에 전송버튼 클릭하면 응답이 매우 잘 나옴. 위와 같은 형태로 JSON 형식 데이터를 주고받을 수 있다. 만약 파일 업로드 + 저장까지 포함한 기능을 구현하고 싶다면 @bp.route('/addTaskAPI.wt',methods=..

    웹브라우저에서 푸시 알림받기

    HTML5 Notification API 웹브라우저 → 클라이언트로 알림기능을 전송할 수 있는 기능을 html에서 API로 제공한다. 사용 방법은 크게 두단계로 권한 허용 메시지 전송 으로 끝. 알림 권한 허용 Notification.requestPermission(); 위 메소드를 호출하면 브라우저에 알림창이 뜨면서 사용자에게 현재 페이지에서 알림을 허용할지를 물어본다. var permission = Notification.requestPermission(); console.log(permission) 이렇게 해서 어떻게 나오는지 보면 허용시 Promise.PromiseResult 메소드값이 granted로 나온다. 차단하면 denied로 바뀌어 나옴. //알림 권한 요청 function getNoti..

    웹소켓 in Flask

    웹소켓을 쓰는 상황? HTTP - 클라이언트 웹 브라우저 요청에 의해 서버가 응답하고, 이를 가지고 다시 클라이언트를 갱신 - 매 요청시마다 페이지 전체를 갱신하는 "동기적" 문제 발생. 즉, 통신할 때 마다 페이지 전체를 새로 랜더링해야하는것. AJAX - 동기적 문제 해결을 위해 클라이언트 XMLhttpRequest 객체의 요청에 의한 서버 응답을 받아 페이지를 갱신하지만, 페이지를 이동하거나 전체를 갱신하는것이 아닌 페이지의 일부를 구성하는 DOM을 갱신할 수 있게됨. 그러나 여전히 요청에 의해 서버의 응답을 받아 페이지를 갱신한다는 문제점은 여전함. 웹소켓을 이용하면 클라이언트의 별도 요청없이도 서버에서 보내는 데이터를 받아 페이지에 표현할 수 있음. 클라이언트의 요청 - 서버의 데이터 응답 의 ..

    JS-autocomplete 사용시 발생한 버그

    Unsigned Complete autocomplete를 이용해 위와 같이 자동으로 리스트가 출력되는 코드를 만들어놓고, 나열되는 목록 중 하나를 클릭하면 해당 내용대로 datatable에 있는 데이터를 필터링하게끔 코드를 짜놨었다. //autocomplete 클릭했을떄 자동으로 테이블 변경 $(document).on('click','.ui-menu-item',function(){ var idx= $(this).parent(".ui-menu").attr('id').slice(-1)-1 console.log(idx) gtable.column(idx).search($(this).text()).draw(); }); 이렇게 하면 ul의 id인 "ui-id-10" 안의 맨 끝 숫자를 받아와 자동으로 테이블의 co..

    flask에서 sql을 사용하는 방식

    flask에서 sql을 사용하는 방식 크게 두가지 정도 있는듯. query_engine에 포함시켜 쿼리를 날리고 결과를 받는 방식 정의된 model 자체를 받아 사용하는 방식 query_engine 방식 #query_engine.py def TaskQuery(): sql = "SELECT * FROM task_list" lresult = db.engine.execute(sql) return lresult ~~~ #task_view.py result = query_engine.TaskQuery() ~~~ return render_template('/task/taskOverView.html',data=result) query_engine에 사용할 쿼리문을 정의하여 sql 쿼리 실행 결과를 받아와 사용하는 방..