Posts

Showing posts with the label hive-141029

jsup/avle 보팅 코드 갱신 - 1일1포스팅 강박에서 벗어나기

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/jsup-avle-1-1 안녕하세요. @joviansummer입니다. @jsup과 @avle의 보팅 코드를 갱신하여 적용하였습니다. 검토는 상당히 오래전부터 진행해 왔습니다만, 최근에 구체적인 설계 방향이 잡히고 기술적으로 어떻게 할 것인지에 대해서도 결정이 되면서 생각보다 빠르게 코드 수정이 진행되었습니다. 새로운 기능은 신청자에 대해서 포스팅이 아니라 댓글에도 보팅을 하는 것입니다. 매일 포스팅하는 것이 부담스럽고 힘들다면 댓글을 달면 됩니다. 당연히 1일1포스팅보다 1일1댓글이 훨씬 쉽고, 댓글을 많이 쓴다고 나쁠 것도 없다고 생각됩니다. 임대 보팅을 받기 위해 억지로 매일 포스팅하는 것은 본인에게도 괴로운 일이고 포스팅 자체도 결국 저품질화될 가능성이 큽니다. 매일 포스팅하는 것이 즐거운 사용자들도 있겠습니다만, 단지 보팅 때문에 억지로 쥐어 짜서 하루에 하나씩 힘들게 포스팅하거나 사실상 내용이 없다시피 한 포스팅을 하는 사용자들도 있는 것이 현실입니다. 보팅을 받아야 한다는 압박감으로 매일 억지로 포스트를 쓰기 시작하면서 스팀잇은 재미 없고 따분한 곳이 되어 갑니다. 게다가 스팀잇의 트렌딩 페이지는 사실상 대량의 임대 셀프 보팅을 받는 사용자의 포스팅을 모아놓은 공간처럼 되어 있어, 이대로 계속 가면 SNS 본연의 매력은 상실하고 코인 채굴장 그 이상도 이하도 아니게 될까 우려되는 측면도 있습니다. 댓글 보팅이 이런 문제를 완화하는데 조금이나마 기여할 수 있지 않을까 생각됩니다. 대상: @jsup 또는 @avle에 스팀파워를 임대하여 보팅을 받고 있는 계정 신청 방법: @jsup 또는 @joviansummer의 최근 포스트에 "댓글 보팅을 신청합니다"라는 내용으로 댓글을 써 주시면 됩니다. 제가 확인하고 서버에 등록하면 다음날부터 해당 계정은 포스트/댓글 관계 없이 그날 처음 작성하...

파이썬 딕셔너리(dict)의 키(key)들을 모아 리스트 생성 - keys()

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/dict-key-keys 파이썬 딕셔너리(dict)의 키(key)들을 모아서 리스트를 만드는 방법입니다. 딕셔너리의 keys() 함수를 이용합니다. x_dict = {'a':1, 'b':2, 'c':3} x_keys = x_dict.keys() keys() 함수에 의해 반환되는 객체는 dict_keys입니다. 이것을 리스트로 변환합니다. x_list = list(x_keys) print(x_list) ['a', 'b', 'c'] 딕셔너리의 값(value)들을 모아서 리스트로 만들려면 values() 함수를 사용하며, 요령은 같습니다. 아래의 링크를 참고하시기 바랍니다. 파이썬 딕셔너리(dict)의 값(value)들을 모아 리스트 생성 @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다. jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

파이썬 json.dumps()에서 한글 문자열 보존

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/jsondumps 파이썬에서 딕셔너리(dict)를 문자열(str)로 변환할 때 json.dumps() 함수를 활용하게 되는데, 문자열이 한글일 경우 아래와 같이 제대로 표시되지 않을 수 있습니다. import json x_dict = { 'a': '이것은 테스트용 문자열' } x_str = json.dumps(x_dict) print(x_str) {"a": "\uc774\uac83\uc740 \ud14c\uc2a4\ud2b8\uc6a9 \ubb38\uc790\uc5f4"} 한글이 제대로 나오게 하려면 아래와 같이 ensure_ascii 옵션을 False로 지정해야 합니다. x_str = json.dumps(x_dict, ensure_ascii=False) print(x_str) {"a": "이것은 테스트용 문자열"} @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다. jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

파이썬과 SDS API를 이용해서 특정 계정을 증인 프록시(witness proxy)로 설정한 계정 조회

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/sds-api-witness-proxy SDS API를 이용해서 특정 계정을 증인 프록시로 설정한 계정의 목록을 조회할 수 있습니다. 예를 들어 @avle 계정을 증인 프록시로 설정한 계정들을 조회하려면 아래와 같이 할 수 있습니다. import requests import json steem_id = 'avle' sds_url = 'https://sds.steemworld.org/witnesses_api/getAccountsByWitnessProxy/' + steem_id response = requests.get(sds_url) res_dict = json.loads(response.text) res_list = res_dict["result"] requests.get()을 이용해서 증인 프록시를 조회하기 위한 url에 접속해서 응답을 받아 옵니다. 응답은 json 형식의 문자열인데, json.loads() 함수를 이용해서 딕셔너리(dict) 형식으로 변환합니다. "result" 키(key)에 계정 목록이 있으므로, 위의 예시처럼 해당 키의 값을 가져오면 됩니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다. jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avl...

파이썬 beem에서 특정 계정이 소유한 스팀파워 확인

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/04f18-beem 파이썬 beem에서 특정 계정이 소유한 스팀파워를 확인하는 방법입니다. Account 모듈의 get_vests() 함수를 이용합니다. from beem import Steem from beem.account import Account node_list = ["https://api.steemit.com"] s = Steem(node=node_list) a = Account('joviansummer', blockchain_instance=s) my_vests = a.get_vests(only_own_vests=True) get_vests() 함수에서 임대를 받거나 준 스팀파워를 제외하고 본인이 소유한 스팀파워, 즉 자체 스팀파워를 파악하기 위해 only_own_vests=True로 인자를 지정해 줍니다. 반환되어 변수 my_vests에 할당된 결과는 beem에서 제공하는 Amount 객체이며 스팀파워가 아니라 vest값입니다. 이로부터 vest값을 부동소수점 수자(float)로 가져와 스팀파워로 변환을 합니다. 변환은 Steem 객체의 vests_to_sp() 함수를 이용합니다. my_vests_float = my_vests.amount my_sp = s.vests_to_sp(my_vests_float) print(my_sp, "SP") @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다. jSTEEM 프로젝트 ...

파이썬 딕셔너리에서 숫자(int, float)도 키(key)로 사용 가능

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/int-float-key 파이썬 딕셔너리(dict)의 키(key)는 문자열(str)만 사용해 왔기 때문에 막연하게 키는 문자열을 사용한다고 생각했었는데, 숫자(int, float)도 가능하네요. x = {'a':1.5, 1.2:3, 2:'abc'} print(x[1.2]) 3 위의 예시처럼 문자열, 정수, 부동소수점 다 사용 가능합니다. 하지만 정수를 키로 사용할 경우에는 리스트(list)의 인덱스와 혼동할 가능성도 있어 보입니다. 위의 예에서 x[2]라고 하면 리스트의 인덱스 2번이 아니라 딕셔너리의 키가 2라는 의미가 됩니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다. jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

파이썬 flask에서 html 파일을 응답으로 전송

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/flask-html 파이썬 flask로 구현한 웹앱에서 웹브라우저의 요청을 받고 html 파일을 응답으로 보낼 수 있습니다. flask 모듈의 render_template() 함수를 이용하며, html 파일은 웹앱 스크립트(.py 파일)가 있는 디렉토리 하위에 templates 디렉토리를 만들어서 여기에 저장해야 합니다. 아래의 예시는 templates 디렉토리 하위에 있는 index.html 파일을 이용해서 응답하는 경우입니다. from flask import Flask from flask import render_template app = Flask(__name__) @app.route('/') def root_page(): return render_template('index.html') # 본 스크립트를 import하지 않고 직접 실행할 경우 flask 자체 웹서버 실행(포트 5000) if __name__ == "__main__": app.run(host='127.0.0.1', port=5000) 엄밀히 말하면 html로 구성된 템플릿(template)을 응답하는 것으로, 웹앱 코드 안에서 정의된 데이터를 html 페이지에 표시할 수 있는 것 같습니다. 이 부분은 좀 더 공부를 해 봐야겠습니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다. jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀...

파이썬 beem에서 특정 포스트의 보팅 목록 확인

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/2764b6-beem 파이썬 beem에서 특정 포스트에 누가 얼만큼 보팅했는지 확인하는 방법입니다. 보팅 목록은 Comment 객체에서 "active_votes" 키(key)에 할당된 데이터를 조회하면 됩니다. 예시를 보자면 아래와 같습니다. from beem import Steem from beem.comment import Comment node_list = ['https://api.steemit.com'] steem = Steem(node=node_list) authorperm = 'joviansummer/b01bb' comment = Comment(authorperm, blockchain_instance=steem) for v_info in comment['active_votes']: print("voter:", v_info['voter'], ", rshares:", v_info['rshares']) 위의 예시에서 comment['active_votes']에는 보팅 목록이 리스트(list) 형식으로 할당되어 있으며, 각 원소는 딕셔너리(dict) 형식입니다. 원소의 "voter" 키에는 보팅한 계정이 할당되어 있고 "rshares" 키에는 보팅 분량이 할당되어 있습니다. 리스트 예시를 보자면 아래와 같습니다. [{'voter': 'gerber', 'rshares': 53606309}, {'voter': 'ezzy', 'rshares': 37690507983}, ..., {'voter': 'princesslayla...

파이썬의 간단한 웹(http) 서버

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/http 파일을 간단하게 공유하고 싶을 때 파이썬에서 제공하는 간단한 웹서버를 활용할 수 있습니다. 공유하고 싶은 디렉토리로 간 후에 http.server 모듈을 실행하면 됩니다. 리눅스의 경우 아래와 같이 할 수 있습니다. cd ~/shared_files python3 -m http.server 5001 위와 같이 하면 홈디렉토리 하위의 shared_files 디렉토리의 파일을 공유할 수 있는 웹서버가 실행되며, 포트번호는 5001번이 됩니다. 제대로 동작하는지는 웹브라우저에서 http://localhost:5001에 접속해 보면 확인할 수 있겠습니다. 단순 파일 공유 기능인데, 집에서 이쪽 기기에서 저쪽 기기로 파일을 옮기고 싶을 때 편리하네요. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다. jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

pythonanywhere.com에 파이썬 flask 웹앱 호스팅 예시

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/pythonanywherecom-flask 무료로 파이썬 웹앱을 호스팅할 수 있는 pythonanywhere.com에 대한 소개는 이전에 포스팅했습니다. 아래의 링크입니다. 무료 파이썬 호스팅 - pythonanywhere.com 파이썬 flask를 이용하는 웹앱을 pythonanywhere에 호스팅하는 설명 자료입니다. 영문이긴 하지만 참고할 만한 것 같아서 기록해 둡니다. 아래의 링크입니다. https://pythonhow.com/python-tutorial/flask/deploy-flask-web-app-pythonanywhere/ pythonanywhere 웹사이트의 도움말 페이지에도 flask 웹앱에 대한 안내가 있습니다. 아래의 링크입니다. https://help.pythonanywhere.com/pages/Flask @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다. jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

파이썬에서 예외(exception) 발생 메시지를 문자열로 가져오기 - traceback

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/exception-traceback 파이썬에서 예외가 발생했을 경우 이를 출력하는 방법은 traceback.print_exc() 함수를 이용합니다. 관련 내용은 아래의 링크입니다. 파이썬의 try - except 구문에서 오류 메시지 출력(traceback) 오류 메시지를 출력하는 대신 문자열(string) 형식으로 변수에 저장하고 싶다면 traceback.format_exc() 함수를 사용하면 됩니다. import traceback try: x = 100/0 except: print("예외가 발생했습니다.") # 오류 메시지를 문자열 형식으로 exc_str 변수에 저장 exc_str = traceback.format_exc() print(exc_str) @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다. jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

파이썬에서 마크다운(markdown) 문자열을 html로 변환

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/markdown-html 파이썬에서 python-markdown을 이용해서 마크다운 문자열을 html로 바꿀 수 있습니다. python-markdown 설명서 웹사이트는 아래의 링크입니다. https://python-markdown.github.io/reference/ 우선 마크다운 모듈을 설치해야 합니다. pip3 install markdown 이제 마크 다운 문자열을 html로 바꿀 수 있습니다. 아래의 예시를 보면 금방 알 수 있습니다. import markdown markdown_str = '**Hello World!**' html_str = markdown.markdown(markdown_str) print(html_str) \ \ Hello World!\ \ 코드 블럭 등 부가적인 마크다운 문법에 대한 처리를 위해서는 아래와 같이 확장(extension) 옵션을 지정합니다. html_str = markdown.markdown(markdown_str, extensions=['extra']) 일단 extra를 추가하면 기본적인 변환에는 크게 문제가 없을 것 같습니다. 지원하는 확장 목록은 아래의 링크에서 확인할 수 있습니다. https://python-markdown.github.io/extensions/ @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다. jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 ...

파이썬에서 파일이 마지막으로 수정된 시점 확인하기 - os.path.getmtime()

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/ospathgetmtime 파이썬에서 특정 파일이 마지막으로 수정된 시점을 확인하려면 os.path.getmtime() 함수를 사용할 수 있습니다. 예시를 보자면 아래와 같습니다. import os m_time = os.path.getmtime('my_file.txt') 위의 예시는 my_file.txt 파일의 마지막 수정 시점을 구해서 변수 m_time에 할당하는 경우입니다. 형식은 부동소수점수자(float)이며, 유닉스 타임스탬프 형식으로 가져옵니다. 출력해 보면 아래와 같이 될 것입니다. print(m_time) 1662183247.925591 @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다. jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

html 기초 - 외부 링크

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/ac4ac2-html html에서 외부 링크는 " "라는 태그를 이용해서 href 속성을 통해 지정해 줍니다. 예를 들어 표시할 내용은 "Hello World"이고 링크가 "https://steemit.com/@joviansummer/3v1wmj"라면 html에서는 아래와 같이 될 것입니다. "Hello World"를 클릭하면 해당 링크로 접속하게 되겠죠. <a href="https://steemit.com/hello/@joviansummer/3v1wmj">Hello World</a> 만약 링크를 클랙했을 때 새 탭으로 접속하도록 만들려면 target 속성을 아래와 같이 추가로 지정해 줍니다. <a href="https://steemit.com/hello/@joviansummer/3v1wmj" target="_blank">Hello World</a> 새 탭에서 열기를 사용하려면 rel 속성을 아래와 같이 포함하는 것이 안전하다고 합니다. 이렇게 하지 않으면 해킹에 취약할 수 있는 여지가 있다는데, 웹에 대해 조예가 깊지 않아서 자세한 내용은 복잡해서 잘 모르겠지만 어쨌든 아래와 같이 해 주는 것을 권고하는 것 같습니다. <a href="https://steemit.com/hello/@joviansummer/3v1wmj" target="_blank" rel="noopener noreferrer">Hello World</a> @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemi...

파이썬에서 리스트의 길이를 일정하게 유지하는 예시(오래된 원소 제거)

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/ca5472 파이썬에서 리스트에 원소를 추가하면서 일정 길이를 넘지 않도록 가장 오래된 원소를 제거하는 예시입니다. 리스트 길이, 즉 원소의 수가 3을 넘지 않도록 하면서 원소를 추가하는 함수를 아래와 같이 만들어 볼 수 있습니다. MY_LIST = [] MAX_LEN = 3 def add_item(item): global MY_LIST if len(MY_LIST) == MAX_LEN: MY_LIST.pop(0) MY_LIST.append(item) 변수 MY_LIST의 길이가 3이 되면 인덱스 0의 원소를 제거하고, 새로 추가할 원소를 append() 함수를 이용해서 가장 마지막 인덱스에 추가되도록 합니다. 아래와 같이 수자 0~4를 차례로 추가하는 경우를 보면, 길이를 3 이하로 유지하기 때문에 처음에 추가했던 0과 1을 제거되고 MY_LIST는 [2, 3, 4] 이렇게 됩니다. for i in range(5): add_item(i) print(MY_LIST) @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

html 기초 - 캐럭터 인코딩 정보 표시

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/90303a-html 우선 html 페이지의 기본 구성에 대한 내용은 아래의 링크입니다. html 페이지의 기본 구성 html 페이지에 캐럭터 인코딩 정보를 표시하려면 head 영역에 meta 태그를 추가해 주어야 합니다. 예를 들어 utf-8 인코딩을 사용한다면 아래의 예시처럼 될 것입니다. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hello World</title> </head> ... utf-8 인코딩을 사용할 경우에는 이 meta 태그를 추가하지 않아도 괜찮은 것 같습니다. 하지만 만약 다른 인코딩을 사용한다면 명시를 해 주는 것이 좋다고 합니다. 웹브라우저에서 인코딩을 잘못 선택하면 글씨가 다 깨질 수도 있다고 하네요. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다. jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

html 기초 - 페이지의 기본 구성

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/html 파이썬 flask를 보면서 같이 찾아보게 된 내용입니다. 웹사이트의 html 페이지의 기본 구성은 html 태그 안에 head와 body로 되어 있습니다. head 영역에는 제목을 나타내는 title이 있습니다. 예를 들면 아래와 같은 형태입니다. <!DOCTYPE html> <html> <head> <title>Hello World</title> </head> <body> <p>Hello World!</p> </body> </html> 위의 형식으로 body 영역에 내용을 채우면 웹브라우저에서 페이지를 표시해 줍니다. head 영역의 title은 웹브라우저의 실행창 제목에 나타납니다. 참고로 body 영역의 태그는 단락(paragraph)입니다. html 태그도 찾아보니 종류가 꽤나 많은 것 같습니다. 한꺼번에 공부하기는 시간이 많이 걸릴 듯하고 필요할 때마다 찾아보는 것이 나을 것 같네요. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다. jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

파이썬 waitress 웹서버(flask와 연동 가능)

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/waitress-flask 파이썬 flask에서 Flask 객체의 run() 함수를 호출하면 웹서버가 구동됩니다. 이 웹서버는 디버깅을 목적으로 구현된 것이라고 합니다. 성능이나 보안 측면에서 취약하기 때문에 실제로 인터넷에 공개할 웹서버에 대해서는 사용하지 않아야 한다고 합니다. 그래서 어떻게 할 것인가 좀 찾아보니, flask와 연동해서 구동할 수 있는 별도의 웹서버 모듈이 있네요. waitress라는 파이썬 모듈입니다. 우분투 계열 리눅스의 경우 아래와 같이 python3-waitress 패키지를 설치합니다. sudo apt-get install python3-waitress 만약 flask를 이용해서 작성한 웹 앱 스크립트가 test.py라면, 같은 디렉토리에 server.py 스크립트를 아래와 같은 내용으로 만들어 줄 수 있습니다. from waitress import serve # test.py 사용 import test serve(test.app, host='127.0.0.1', port=5000) 위와 같이 작성한 후, test.py가 아니라 server.py를 실행하여 test.py에 작성된 웹 앱을 구동합니다. test.py 스크립트를 import할 때는 flask 자체 웹서버가 구동되지 않아야 하므로 run() 함수가 실행되면 안됩니다. 이런 이유로 test.py 스크립트에서 자체 웹서버 구동과 관련된 내용은 아래와 같은 형태로 작성되어야 합니다. from flask import Flask app = Flask(__name__) ... if __name__ == "__main__": app.run(host='127.0.0.1', port=5000) waitress 모듈의 설명서는 아래의 링크입니다. https://docs.pylon...

파이썬 flask에서 응답 종류(mimetype) 지정

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/flask-mimetype 파이썬 flask에서 접속 요청에 대한 응답을 보낼 때 종류(mimetype)을 지정하는 방법입니다. Response 객체를 이용하면 됩니다. 예제를 보겠습니다. from flask import Flask from flask import Response app = Flask(__name__) @app.route('/') def root_page(): return Response('<b>hello world!</b>', mimetype='text/html') @app.route('/test/') def test_page(): return Response('test', mimetype='text/plain') if __name__ == "__main__": app.run(host='127.0.0.1', port=5000) 출력할 페이지를 반환(return)할 때 Response 객체를 이용해서 "hello world!" 출력은 html 형식(text/html), "test" 출력은 일반 텍스트(text/plain)라고 지정해 주었습니다. 웹브라우저에게 데이터 형식을 알려주면 응답을 화면에 표시할 것인지 다운로드할 것인지를 좀 더 정확하게 판단할 수 있겠죠. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jsup 서비스에 큐레이션...

파이썬 flask로 hello world 웹페이지 작성

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/flask-hello-world 파이썬 flask로 간단한 웹페이지를 만드는 예시입니다. 우선 flask 모듈을 설치합니다. 우분투 계열 리눅스의 경우 아래와 같이 python3-flask 패키지를 설치해 주면 됩니다. sudo apt-get install python3-flask 예제 코드는 매우 간단합니다. from flask import Flask app = Flask(__name__) @app.route('/') def root_page(): return "hello world!" @app.route('/test/') def test_page(): return "test" # 본 스크립트를 import하지 않고 직접 실행할 경우 flask 자체 웹서버 실행(포트 5000) if __name__ == "__main__": app.run(host='127.0.0.1', port=5000) 위와 같은 스크립트를 실행하면 웹서버가 구동되어 루프백(loopback) 주소(127.0.0.1)의 5000번 포트를 열게 됩니다. 루트 페이지(http://localhost:5000/)에 접속하면 문자열 "hello world!"가 표시되고, 테스트 페이지(http://localhost:5000/test/)에 접속하면 문자열 "test"가 표시됩니다. 어떤 페이지에 접속하면 어떤 내용을 표시해 줄 것인지를 위와 같이 함수를 정의하고 데코레이터(decorator)를 이용해서 웹 앱의 route() 함수가 해당 함수를 받아서 처리합니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://...