[NEXT] Flask 로 Restful API 서버 만들기 YoungSu SonWritten By 정문철
Reviewed By 손영수
Mac에서 Flask로 Restful API 서버를 간단히 만드는 방법입니다
Android Basic 4일차 전에 진행되어야 하는 실습입니다.
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?Sang-ho Choi커빙의 Django, Celery, Azure Cloud, SNS 연동, 컨텐츠 수집 기술을 한눈에 볼 수 있도록 소개한 자료 입니다.
커빙을 처음 개발하면서 많은 어려움이 있었고,
또 많은 분들의 도움으로 좋은 결과를 얻을 수 있었습니다.
조금 더 깊은 내용을 다뤘으면 하는 아쉬움이 있지만,
다른 분들에게 조금이나마 도움이 되었으면 좋겠네요!
PHP로 Slack Bot 만들기Changwan Jun보통 Node나 Python으로는 봇을 많이 만드는데 PHP로는 잘 만들지 않습니다. 하지만 PHP로도 쉽게 만들 수 있습니다. PHP로 아주 약간의 자연어로 대화가능한 봇 만드는 방법을 소개합니다.
12월 Modern PHP User Group에서 발표한 내용입니다.
Light Tutorial DjangoKwangyoun JungLight Tutorial Django
Studybee 3주차 - 가볍게 배우는 장고!!
Django를 이용해 블로그를 만들기 전에 가볍게 Django에 대해 알아보고 익숙해져 봅시다.
**http://www.studybee.kr 에서 운영하는 '초심자를 위한 웹개발' 클래스에서 만드는 교재이며,
장고를 이용해 간단하게 블로그를 만드는 것을 목표로 하고 있습니다.
spring data jpa 간단한 튜토리얼라한사 아github : https://github.com/arahansa/learnspringdatajpa
스프링 데이터 Jpa 간단한 튜토리얼 입니다. 초보용^^;
스프링 부트, 메이븐..
내용은 간단한 매핑, CRUD, 페이징, 스프링 부트조금.
PHP로 Slack Bot 만들기Changwan Jun보통 Node나 Python으로는 봇을 많이 만드는데 PHP로는 잘 만들지 않습니다. 하지만 PHP로도 쉽게 만들 수 있습니다. PHP로 아주 약간의 자연어로 대화가능한 봇 만드는 방법을 소개합니다.
12월 Modern PHP User Group에서 발표한 내용입니다.
Light Tutorial DjangoKwangyoun JungLight Tutorial Django
Studybee 3주차 - 가볍게 배우는 장고!!
Django를 이용해 블로그를 만들기 전에 가볍게 Django에 대해 알아보고 익숙해져 봅시다.
**http://www.studybee.kr 에서 운영하는 '초심자를 위한 웹개발' 클래스에서 만드는 교재이며,
장고를 이용해 간단하게 블로그를 만드는 것을 목표로 하고 있습니다.
spring data jpa 간단한 튜토리얼라한사 아github : https://github.com/arahansa/learnspringdatajpa
스프링 데이터 Jpa 간단한 튜토리얼 입니다. 초보용^^;
스프링 부트, 메이븐..
내용은 간단한 매핑, CRUD, 페이징, 스프링 부트조금.
알아봅시다, Polymer: Web Components & Web AnimationsChang W. DohGDG Korea WebTech : 시작하세요, Polymer, Oct, 11, 2014.
Let's learn about specifications before diving into Polymer:
- Web Components
- Web Animations
This slide includes resources from HTML5Rocks, Polymer and PolyTechnic.
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi JaesungScala, Spring-Boot, JPA를 활용한 웹 애플리케이션 개발 과정에 대해 다룬다. Spring-Boot와 JPA 조합만으로도 생산성 있는 웹 애플리케이션 개발이 가능하다. 이 조합만으로도 충분히 의미가 있지만 여기에 Scala라는 약간은 불편한 듯 보이는 언어를 도입함으로써 얻을 수 있는 즐거움을 공유한다. Spring-Boot + JPA 조합에 Scala를 적용하면서의 좌충우돌 경험담을 전한다.
2. 템플릿이 뭐에요?
• 웹 개발에서 템플릿은 데이터를 덧씌울
HTML 파일을 지칭
• 웹 템플레이트 (Web Template)
3. ???
• 웹 개발 간단 리뷰
• 일반적인 웹 서비스의 구조
– 클라이언트
– 웹 서버
– 웹 애플리케이션 (+ 데이터베이스)
7. 클라이언트 -> 웹서버
• Flask가 제공하는 개발 전용 웹서버
– Apache 등을 설치할 필요 없이 개발 환경에서 간
단한 웹서버를 구동
– 클라이언트에서 받은 HTTP request 실시간 확인
– 실제 서비스 용도는 아님!
8. 웹서버 -> 웹 애플리케이션
• 웹서버로 온 HTTP Request -> 웹앱 전달
• 웹 애플리케이션은 request에 대응해서,
– 데이터베이스에서 데이터를 가져온 후 가공
– 데이터를 HTML에 입힌 후 전송 (response)
• 데이터를 입히는 작업을 “렌더링” 혹은 “템플레이
팅”이라고 부름
• 이 작업을 하는 도구가 “템플릿 엔진”
9. Flask의 템플릿 엔진
• Jinja2
– Flask에 포함된 템플릿 엔진
– 하지만 Flask와 독립된 프로젝트
• Flask 프로젝트에서 Jinja2 아닌 다른 템플릿 엔진
사용 가능 (Genshi, Mako 등)
• 그러나 Flask의 플러그인 호환성을 위해 Jinja2는
기본적으로 설치 해야 됨
10. Jinja2 기본 Syntax
• 표현식은 {% … %}
• 변수는 {{ … }}
• 표현식은 파이썬과 비슷
– 예) team_list라는 리스트를 렌더링할때:
{% for team in team_list %}
{{ team }}
{% endfor %}
17. 렌더링된 페이지
• HTML 수정 없음!
• “내용”과 “프레젠테이션”의 분리
– 내용은 서버에서 데이터를 가공
– 프레젠테이션 로직은 템플릿 언어로 표현
18. Jinja2 기본 Syntax
• 다음과 같은 표현도 가능:
– {{ foo.bar }}
– {{ foo[„bar‟] }}
• 예제 1)
– View에서 다음 dict object를 보내면,
var = { „name‟ : u‟플라스크‟, „date‟ : u‟7/9/2012‟ }
– 템플릿에서 {{ var.name }}이나 {{ var.date }}로
사용 가능
19. Jinja2 기본 Syntax
• 예제 2)
class Study():
name = u‟플라스크‟
my_study = Study()
• view에서 my_study를 넘겨준 후,
{{ my_study.name }}
20. Jinja2 기본 Syntax
• flow control:
{% if kenny.sick %}
Kenny is sick.
{% elif kenny.dead %}
You killed Kenny! You bastard!!!
{% else %}
Kenny looks okay --- so far
{% endif %}
21. Jinja2 기본 Syntax
• function:
{% for number in range(5) %}
<li class="empty"><span>...</span></li>
{% endfor %}
22. Jinja2 필터
• filter:
{{ name|capitalize }}
-> capitalize(name)과 같은 효과
• argument도 사용 가능
{{ "%s - %s"|format("Hello?", "Foo!") }}
-> “Hello? - Foo!”
23. Jinja2 필터
• 쉽게 custom filter를 등록해서 사용
• 예제:
from jinja2 import contextfilter
@contextfilter
def my_filter(context, value):
result = do_something(value)
return result
-> {{ name|my_filter }}
24. Jinja2 테스트
• 표현식 내에서 사용 가능한 간단한 테스트들
{% if loop.index is divisibleby(3) %}
• number(), string(), defined(), 등등…
• http://jinja.pocoo.org/docs/templates/#builtin-
tests
27. Jinja2 템플릿 상속
• 예제) hello.html의 header와 footer 부분을 base.html로
떼어내기
• 분리된 hello.html:
28. Jinja2 템플릿 상속
• 한 템플릿 안에 여러 {% block %} 생성 가능
• 예제)
Base.html:
<!doctype html>
<html>
{% block header %}{% endblock %}
{% block css %}{% endblock %}
{% block body %}{% endblock %}
{% block footer %}{% endblock %}
{% block javascript %}{% endblock %}
</html>
29. Jinja2 Autoescaping
• 경우에 따라, 렌더링하는 변수에 HTML이 포함되는 경우
가 있음:
description = <h1>Hello</h1>
{{ description }}
• 만일 적절한 처리가 되어 있지 않다면, 악성 스크립트가
렌더링되는 경우가 발생 -> 보안 위험 (XSS 공격)
• 따라서, HTML 특수 기호 <,> 등은 렌더링할때 HTML로
인식되지 않게 처리 -> “autoescape” (기본 설정 on)
30. Jinja2 Autoescaping
• 만일 HTML을 렌더링 하고 싶으면, autoescape
설정을 끄면 됨:
description = <h1>Hello!</h1>
{% autoescape false %}
{{ description }}
{% endautoescape %}
-> <h1>이 HTML 태그로 렌더링 됨
• 보안 위험 주의!
31. Jinja2의 모든 기능
• 다양한 Jinja2의 filter, built-in test들은 공식 문서
를 참고!
• http://jinja.pocoo.org/docs/templates/