[html] post 방식을 링크 시키는 방법

1. HTML의 form 이용

<form name="myForm" action="http://httpbin.org/post" method="POST">
<input type="hidden" name="some_key1" value="some_value1" />
<input type="hidden" name="some_key2" value="some_value2" />
</form>

<a href="#" onclick="javascript:document.myForm.submit();">click</a>

click




2. JavaScript 함수 이용

<script>
    function page_move(url, some_data) {
        var form = document.createElement("form");
        var parm = new Array();
        var input = new Array();

        form.action = url;
        form.method = "post";


        parm.push( ['some_key1', 'some_value1'] );
        parm.push( ['some_key2', 'some_value2'] );
        parm.push( ['some_data', some_data] );


        for (var i = 0; i < parm.length; i++) {
            input[i] = document.createElement("input");
            input[i].setAttribute("type", "hidden");
            input[i].setAttribute('name', parm[i][0]);
            input[i].setAttribute("value", parm[i][1]);
            form.appendChild(input[i]);
        }
        document.body.appendChild(form);
        form.submit();
    }
</script>

<a href="#" onclick="javascript:page_move('http://httpbin.org/post', 'foobar');">click</a>

click


  1. Favicon of http://nazuna.kr BlogIcon 나즈나 2018.07.25 04:26 신고

    두번째 방법 document.body.appendChild(form); 빠졌네요..

[PyQt5, pyinstaller] Failed to execute script pyi_rth_qt5plugins

PyQt로 만들어진 프로그램을 윈도우에서 pyinstaller로 컴파일을 했으나
만들어진 프로그램은 실행되지 않고 바로 종료 되었다.

콘솔모드로 컴파일후 콘솔로 실행했더니 아래와 같은 trace back을 얻을수 있었다.

Traceback (most recent call last):
  File "site-packages\pyinstaller-3.2.1+5b84a8d-py3.5.egg\PyInstaller\loader\rthooks\pyi_rth_qt5plugins.py", line 46, in <module>
  File "C:\Python35\lib\site-packages\pyinstaller-3.2.1+5b84a8d-py3.5.egg\PyInstaller\loader\pyimod03_importers.py", line 573, in load_module
    module = loader.load_module(fullname)
ImportError: DLL load failed: 지정된 모듈을 찾을 수 없습니다.
Failed to execute script pyi_rth_qt5plugins


구글링으로 두가지 해결방법을 찾을수 있었다.




pyinstaller develop 버전 설치

  1. github에서 develop branch를 내려받는다.

    https://github.com/pyinstaller/pyinstaller/archive/develop.zip

  2. 기존의 pyinstaller를 제거하고 내려받은 pyinstaller를 설치한다.

    py -3 -m pip uninstall pyinstaller
    cd pyinstaller-develop
    py -3 setup.py install
    

그런데 어째선지 나의 경우에는 설치가 되지 않았다. 아마 개발자가 업데이트 도중 아직 release를 하지 못한 모양이다..
어쩔 수 없이 다른 방법을 찾을수 밖에 없었다.




.spec파일 직접 작성

.spec 파일의 pathex 항목에 PyQt5의 bin디렉토리 경로를 추가해준다.

나의 경우에는 python3이 C:\Python35에 설치돼 있으므로,
PyQt5의 bin 디렉토리 위치는 C:\Python35\Lib\site-packages\PyQt5\Qt\bin 이 된다.

  1. setup.spec 파일을 만들어 각자 상황에 맞게 작성한다.

    # -*- mode: python -*-
    
    block_cipher = None
    app_path = 'my_app.pyw'
    app_name = 'my_app'
    
    a = Analysis([app_path],
                 pathex=[r'C:\Python35\Lib\site-packages\PyQt5\Qt\bin'],
                 binaries=[],
                 datas=[],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher)
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)
    exe = EXE(pyz,
              a.scripts,
              exclude_binaries=True,
              name=app_name,
              debug=False,
              strip=False,
              upx=True,
              console=False , icon='' )
    coll = COLLECT(exe,
                   a.binaries,
                   a.zipfiles,
                   a.datas,
                   strip=False,
                   upx=True,
                   name=app_name)
    
  2. spec파일로 컴파일한다

     pyinstaller setup.spec
    

    성공!





참조: https://github.com/pyinstaller/pyinstaller/issues/2152

About me




이민철

2_minchul@naver.com

+ Recent posts