Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Static
- Heap
- Linux
- github
- network
- redis
- 데이터통신
- HTTP
- mongodb
- VCS
- socket
- javascript
- AWS
- html
- reactive
- nodejs
- libuv
- r
- Lombok
- git
- NoSQL
- spring
- effective
- reactor
- 네트워크
- ajax
- Elk
- Java
- cache
- mybatis
Archives
- Today
- Total
빨간색코딩
Flask 기초 본문
flask 를 간단히 쓸 용도로, 공식문서를 보고 대강 메모해두었다.
1. 시작하기
- 설치 : pip install flask
- hello world : app.py
from flask import Flask app = Flask(__name__) @app.route('/') def home(): return 'This is Home!' if __name__ == '__main__': app.run('0.0.0.0',port=5000,debug=True)
2. 라우터
- 라우터에서 인자 받기
- GET : request.args.get(매개변수명)
- POST : request.form[매개변수명]
- 라우터에서 path 받기
@app.route('/post/<int:post_id>') def show_post(post_id): 수행문
- json 반환 : return jsonify({'result':'success', 'data': '...'})
- url 반환 : url_for 사용
- 컨텍스트에 따라 상대경로를 알아서 생성해줌
- 메소드 : @app.route('/login', methods=['GET', 'POST'])
- 정적 파일 : static 이 기본값으로 특수설정 되어있음.
- url_for('static', filename='style.css')
- 템플릿에선 <img src="{{ url_for('static', filename='rome.jpg') }}"/>
- 리다이렉트 : redirect(url_for('login'))
- 응답코드별 에러핸들러 : @app.errorhandler(404) def page_not_found(error):
- 응답 반환 포맷 : (response, status, headers)
- 문자열이면 알아서 text/html 로 된다
- 요청 전,후 interceptor : @app.before_request, @app.teardown_request
- 하나의 요청 내 글로벌 변수인 flask.g 에 보통 바인딩해서 씀
3. 로깅
- 기본 로거 사용
app.logger.debug('A value for debugging') app.logger.warning('A warning occurred (%d apples)', 42) app.logger.error('An error occurred')
4. 템플릿 엔진
- autoescaping 된다
- unescape 하려면 {% autoescape false %} ... {% endautoescape %}
- 템플릿으로 데이터 전달 : return render_template('index.html', key = value)
- 템플릿에서 데이터 출력 : <div>{{key}}</div>
- 문장 : {% ... %}
- 표현식 : {{ ... }}
- 주석 : {# ... #}
- 라인문장? : # ... ##
- 반복문 : {% for i in data %} {{ loop.index }}. {{ i }} {% endfor %}
- 조건문 : {% if name %} ... {% else %} ... {% endif %}
- 템플릿 상속 : https://wikidocs.net/81051
<!-- 부모 --> <!doctype html> <html> <head> {% block head %} <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}"> <title>{% block title %}{% endblock %} - My Webpage</title> {% endblock %} </head> <body> <div id="content">{% block content %}{% endblock %}</div> <div id="footer"> {% block footer %} © Copyright 2010 by <a href="http://domain.invalid/">you</a>. {% endblock %} </div> </body> <!-- 자식 --> {% extends "layout.html" %} {% block title %}Index{% endblock %} {% block head %} {{ super() }} <style type="text/css"> .important { color: #336699; } </style> {% endblock %} {% block content %} <h1>Index</h1> <p class="important"> Welcome on my awesome homepage. {% endblock %}
- custom filter
- 등록 : @app.template_filter('필터명') def 함수명(매개변수):
- 사용 : {% for x in mylist | reverse %}
- context processor
# .py @app.context_processor def utility_processor(): def format_price(amount, currency=u'€'): return u'{0:.2f}{1}'.format(amount, currency) return dict(format_price=format_price) # 템플릿 {{ format_price(0.33) }}
5. 어플리케이션 환경별 설정 방식
- class 상속 활용
class Config(object): DEBUG = False TESTING = False DATABASE_URI = 'sqlite://:memory:' class ProductionConfig(Config): DATABASE_URI = 'mysql://user@localhost/foo' class DevelopmentConfig(Config): DEBUG = True class TestingConfig(Config): TESTING = True config_by_name = dict( dev=DevelopmentConfig, test=TestingConfig, prod=ProductionConfig )
- os.getenv("ENV") 와 같이 가져와서 사용
6. 캐싱
'python' 카테고리의 다른 글
파이썬의 기초 (개발환경 세팅, 문법) (0) | 2022.02.01 |
---|---|
파이썬 2.7 설치 (pip, virtualenv, window10기준) (0) | 2018.06.26 |
Comments