SlideShare a Scribd company logo
Django 와 Flask
이지호 (Freelancer)
search5@gmail.com
2016.07.08 Django 와 Flask 2
목차
0. 공통 ( 가상 환경 구축 )
1. 웹 사이트 프로젝트 시작하기
2. Django 뷰와 Flask 뷰 차이
3. Django Form 과 WTForms
4. Django 와 Flask 로 중대형 사이트 구축
5. Django 와 Flask 와 Route 구현
6. Django 와 Flask 와 데이터 모델 구현
7. Django 와 Flask 의 데이터 모델 검증
8. Django 와 Flask 의 URL 구현 차이
9. Django 와 Flask 의 필터 , Reusable Component
2016.07.08 Django 와 Flask 3
0. 공통 ( 가상 환경 구축 )
& 모든 파이썬 프로젝트는 반드시 파이썬 가상환경 구축
& Python 2.x, 3.x = virtualenv
& Python 3.x = pyvenv
& Virtualenv 를 더 쉽게 = Virtualenvwrapper
그 외 ..
Conda, pyenv, autoenv
2016.07.08 Django 와 Flask 4
웹 사이트 프로젝트 시작하기
Django:
$ django-admin startproject <project_name>
Flask:
$ mkdir -p project_name/project_name
$ touch project_name/project_name/__init__.py
2016.07.08 Django 와 Flask 5
Django 뷰와 Flask 뷰 차이
Django:
- CBV(Class Based Views)
- FBV(Function Based Views)
Flask:
- Pluggable View(View, MethodView)
- Function View
2016.07.08 Django 와 Flask 6
Django 뷰와 Flask 뷰 차이
Django:
- CBV(Class Based Views)
Example
from django.conf.urls import url
from django.views.generic import TemplateView
urlpatterns = [
url(r'^about/$',
TemplateView.as_view(template_name="about.html")),
]
2016.07.08 Django 와 Flask 7
Django 뷰와 Flask 뷰 차이
Django:
- FBV(Function Based Views)
Example
from django.http import HttpResponse
import datetime
def current_datetime(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^datetime/$', views.current_datetime)
]
2016.07.08 Django 와 Flask 8
Django 뷰와 Flask 뷰 차이
Flask View:
- Pluggable View(View)
Example
from flask.views import View
class ShowUsers(View):
def dispatch_request(self):
users = User.query.all()
return render_template('users.html', objects=users)
app.add_url_rule('/users/',
view_func=ShowUsers.as_view('show_users'))
2016.07.08 Django 와 Flask 9
Django 뷰와 Flask 뷰 차이
Flask View:
- Pluggable View(Method View)
Example
class UserAPI(MethodView):
decorators = [user_required]
def get(self, user_id):
pass
def post(self):
# create a new user
pass
def delete(self, user_id):
# delete a single user
pass
2016.07.08 Django 와 Flask 10
Django 뷰와 Flask 뷰 차이
Flask View:
- Function Based View
Example
@app.route('/users/')
def show_users(page):
users = User.query.all()
return render_template('users.html', users=users)
2016.07.08 Django 와 Flask 11
Django Form 과 WTForms
Django Models 객체를 통해 Template 에서 호출
Example
Model:
from django.db import models
class Question(models.Model):
tag = models.CharField(max_length=200)
Template:
{{ form.tag.label_tag }} {{ form.tag }}
2016.07.08 Django 와 Flask 12
Django Form 과 WTForms
WTForms 를 통해 템플릿 구축하기
Example
from wtforms import Form, StringField, validators
class RegistrationForm(Form):
username = StringField('Username',
[validators.Length(min=4, max=25)])
email = StringField('Email Address', [validators.Length(min=6,
max=35)])
2016.07.08 Django 와 Flask 13
Django Form 과 WTForms
WTForms 를 통해 템플릿 구축하기
Example
{% macro render_field(field) %}
<dt>{{ field.label }}
<dd>{{ field(**kwargs)|safe }}
{% if field.errors %}
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</dd>
{% endmacro %}
2016.07.08 Django 와 Flask 14
Django 와 Flask 로 중대형 사이트 구축
Django 로 구축하기
$ django-admin startproject <project_name>
$ cd project_name
$ ./manage.py startapp <app_name>
Flask 로 구축하기
$ mkdir -p <project_name>/<project_name>
$ touch <project_name>/<project_name>/__init__.py
1) Blueprint 모듈 만들어서 추가
2) url 만 정의된 파일 작성해서 임포트하기
2016.07.08 Django 와 Flask 15
Django 와 Flask 와 Route 구현
Django:
urls.py 구현
urlpatterns 변수 재정의
urlpatterns = [
url(r'^datetime/$', views.current_datetime)
]
Flask:
function: app.add_url_rule, app.register_blueprint
decorator: app.route
2016.07.08 Django 와 Flask 16
Django 와 Flask 와 데이터 모델 구현
Django
Model File
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
Result: <Model Result>
CREATE TABLE myapp_person (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
2016.07.08 Django 와 Flask 17
Django 와 Flask 와 데이터 모델 구현
Flask - Database File
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite:////tmp/test.db',
convert_unicode=True)
db_session =
scoped_session(sessionmaker(autocommit=False,
autoflush=False, bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
def init_db():
import yourapplication.models
Base.metadata.create_all(bind=engine)
2016.07.08 Django 와 Flask 18
Django 와 Flask 와 데이터 모델 구현
Flask - Model File
from sqlalchemy import Column, Integer, String
from yourapplication.database import Base
class User(Base):
__tablename__ = 'users'
first_name = Column(String(30), nullable=False)
last_name = Column(String(30), nullable=False)
2016.07.08 Django 와 Flask 19
Django 와 Flask 의 데이터 모델 검증
Django
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _
def validate_even(value):
if value % 2 != 0:
raise ValidationError(
_('%(value)s is not an even number'),
params={'value': value},
)
from django.db import models
class MyModel(models.Model):
even_field = models.IntegerField(validators=[validate_even])
2016.07.08 Django 와 Flask 20
Django 와 Flask 의 데이터 모델 검증Django - View 에서 처리
form = MyModel(request.POST)
검증 : form.is_valid()
유효성을 통과한 데이터 : form.cleaned_data
에러 내용 : form.erros
Flask - View 에서 처리
form = MyModel(request.form)
검증 : form.validate()
검증이 완료된 데이터 객체 복사해오기 : populate_obj
에러 내용 : form.erros
2016.07.08 Django 와 Flask 21
Django 와 Flask 의 URL 구현 차이
Django
Backend: reverse, reverse_lazy 함수 사용
Template: {% url %} 태그 사용
Flask
Backend 와 Template 모두 url_for(end_point,
**kwargs) 사용
2016.07.08 Django 와 Flask 22
Django 와 Flask 의 필터 , Reusable
Component
Django
- Custom Tag
- Custom Filter
Flask Filter
- Custom Tag( 단 , Extension 클래스 상속 구현 )
- Custom Filter
- Reusable Component(macro)
2016.07.08 Django 와 Flask 23
Django 와 Flask 의 필터 , Reusable
Component
Django - Custom Tag
from django import template
register = template.Library()
@register.simple_tag
def my_tag(a, b, *args, **kwargs):
warning = kwargs['warning']
profile = kwargs['profile']
...
return ...
2016.07.08 Django 와 Flask 24
Django 와 Flask 의 필터 , Reusable
Component
Django - Custom Filter
from django import template
register = template.Library()
@register.filter(is_safe=True)
def add_xx(value):
return '%sxx' % value
2016.07.08 Django 와 Flask 25
Django 와 Flask 의 필터 , Reusable
Component
Flask - Custom Filter, Global Function
@app.template_filter('filter_name')
def int_add(d, b):
return d+b
@app.template_global('global_name')
def int_minus(d, b):
return d-b
Flask - Custom Variable
@app.context_processor
def utility_processor():
return dict(name='fastcampus')
2016.07.08 Django 와 Flask 26
Django 와 Flask 의 필터 , Reusable
Component
Flask – Reusable Component (Macro)
{% macro input(name, value='', type='text', size=20) -
%}
<input type="{{ type }}" name="{{ name }}" value="{{
value|e }}" size="{{ size }}">
{%- endmacro %}
{{ input('tt') }}
2016.07.08 Django 와 Flask 27
백엔드 개발자가 가져야 할 스탠스
1) 테스트케이스 작성과 회귀 테스트
- Flask는 test_client 메서드로 테스트 브라우저 생성
- 회귀 테스트는 travis-CI, Jenkins-CI 사용 권장
2) 소스 저장소 일원화
- 회사에서 사용하는 저장소 일원화(ex, Gitlab, BitBucket
등)
3) 외부 라이브러리 조사 및 정리
- 프로그램 개발 과정에서 새로운 라이브러리의 사용이나
기존에 사용된 라이브러리의 사용방법이나 문제사항을 정
리한 기술 노트(오프라인 및 온라인 도구 사용-위키, 에버노
트, 원노트 등)
2016.07.08 Django 와 Flask 28
백엔드 개발자가 가져야 할 스탠스
4) 그리고 동료들과 끊임없는 대화와 배려를 통한 협업
무엇보다 백엔드 개발자로서 백엔드 프로그램을 안정적으
로 유지할 수 있도록
개발 PC → 테스트 서버 → 스테이지 서버 → 운영 서버
로 나눠서 작업할 수 있도록 팀에 제안 및 이끌어야 합니다.
2016.07.08 Django 와 Flask 29
Thanks

More Related Content

PDF
회사에서 써보는 SQLAlchemy
PDF
Django를 Django답게, Django로 뉴스 사이트 만들기
PPTX
Django View Part 1
PDF
테스트가 뭐예요?
PPTX
플라스크 템플릿
PDF
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
PDF
Light Tutorial Django
PDF
Django admin site 커스텀하여 적극적으로 활용하기
회사에서 써보는 SQLAlchemy
Django를 Django답게, Django로 뉴스 사이트 만들기
Django View Part 1
테스트가 뭐예요?
플라스크 템플릿
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
Light Tutorial Django
Django admin site 커스텀하여 적극적으로 활용하기

What's hot (20)

PDF
처음배우는 자바스크립트, 제이쿼리 #1
PDF
Django, 저는 이렇게 씁니다.
PDF
처음배우는 자바스크립트, 제이쿼리 #4
PDF
Light Tutorial Python
PPTX
4-1. javascript
PPTX
Angular2 가기전 Type script소개
PPT
자바야 놀자 PPT
PPTX
레거시 시스템에 Django 들이밀기
PDF
Django in Production
PPTX
Angular2 router&http
PPTX
ECMAScript 6의 새로운 것들!
PPT
헷갈리는 자바스크립트 정리
PDF
ReactJS | 서버와 클라이어트에서 동시에 사용하는
PDF
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)
PPTX
5-5. html5 connectivity
PPTX
Web Components 101 polymer & brick
PDF
안드로이드 개발자를 위한 스위프트
PDF
Javascript 101
PDF
처음배우는 자바스크립트, 제이쿼리 #3
PPTX
4-2. ajax
처음배우는 자바스크립트, 제이쿼리 #1
Django, 저는 이렇게 씁니다.
처음배우는 자바스크립트, 제이쿼리 #4
Light Tutorial Python
4-1. javascript
Angular2 가기전 Type script소개
자바야 놀자 PPT
레거시 시스템에 Django 들이밀기
Django in Production
Angular2 router&http
ECMAScript 6의 새로운 것들!
헷갈리는 자바스크립트 정리
ReactJS | 서버와 클라이어트에서 동시에 사용하는
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)
5-5. html5 connectivity
Web Components 101 polymer & brick
안드로이드 개발자를 위한 스위프트
Javascript 101
처음배우는 자바스크립트, 제이쿼리 #3
4-2. ajax
Ad

Viewers also liked (20)

PPTX
Django vs Flask
PDF
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
PDF
파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)
PDF
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)
PDF
Python과 flask 입문(1)
PDF
과학데이터와연구소재
PDF
Postgres NoSQL - Delivering Apps Faster
 
PDF
MartinezMarjorie-DevCon Summit Certificate of Participation
PPTX
DevCon Summit 2016
PDF
We Buy Cheese in a Cheese Shop
PDF
Android Trends @ DevCon Summit 2016
PPTX
Introduction to Python
PDF
Build website in_django
PPTX
Open cv with processing
PDF
Quick flask an intro to flask
PDF
Django ORM 왜 어렵게 느껴질까?
PDF
Writing your first web app using Python and Flask
KEY
LvivPy - Flask in details
PPTX
Python, Development Environment for Windows
PDF
[NEXT] Flask 로 Restful API 서버 만들기
Django vs Flask
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)
Python과 flask 입문(1)
과학데이터와연구소재
Postgres NoSQL - Delivering Apps Faster
 
MartinezMarjorie-DevCon Summit Certificate of Participation
DevCon Summit 2016
We Buy Cheese in a Cheese Shop
Android Trends @ DevCon Summit 2016
Introduction to Python
Build website in_django
Open cv with processing
Quick flask an intro to flask
Django ORM 왜 어렵게 느껴질까?
Writing your first web app using Python and Flask
LvivPy - Flask in details
Python, Development Environment for Windows
[NEXT] Flask 로 Restful API 서버 만들기
Ad

Similar to Django와 flask (20)

PDF
Scala for play
PDF
Isomorphicspring Isomorphic - spring web seminar 2015
PPTX
파이썬 플라스크 이해하기
PDF
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
PDF
자바스크립트 프레임워크 살펴보기
PDF
AngularJS 2, version 1 and ReactJS
PPTX
Jdk(java) 7 - 5. invoke-dynamic
PDF
Front-end Development Process - 어디까지 개선할 수 있나
PDF
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
PPTX
2013 JCO tipJS.com JavaScript MVC framework
PDF
Ji 개발 리뷰 (신림프로그래머)
PDF
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
PPTX
Nodejs, PhantomJS, casperJs, YSlow, expressjs
PPTX
Angular 2 rc5 조사
PDF
다시보는 Angular js
PDF
Python codelab1
PPTX
자바스크립트 클래스의 프로토타입(prototype of class)
PPTX
Nodejs express
PPTX
4-3. jquery
Scala for play
Isomorphicspring Isomorphic - spring web seminar 2015
파이썬 플라스크 이해하기
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
자바스크립트 프레임워크 살펴보기
AngularJS 2, version 1 and ReactJS
Jdk(java) 7 - 5. invoke-dynamic
Front-end Development Process - 어디까지 개선할 수 있나
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
2013 JCO tipJS.com JavaScript MVC framework
Ji 개발 리뷰 (신림프로그래머)
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Angular 2 rc5 조사
다시보는 Angular js
Python codelab1
자바스크립트 클래스의 프로토타입(prototype of class)
Nodejs express
4-3. jquery

More from Jiho Lee (15)

PDF
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
PPTX
게임으로 배우는 코딩 - 마인크래프를 중심으로
PPTX
개발자, 그 이상 그리고 그 이하
PPTX
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
PDF
PostgreSQL로 배우는 SQL 기초
PDF
암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관
PDF
사물 인터넷과 인공지능이 만나는 세계
PPTX
인간이 아이에게 줄 수 있는 가장 최선의 것
PDF
파이콘 2017 그만퇴근합시다_이지호
PDF
소물 2017 네트워크로 감성 나누기
PDF
10월의 하늘_2016_진도 공공도서관_이지호
PDF
생각과 프로그램 개발 - 10월, 소프트웨어에 물들다
PDF
책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...
PPTX
2016 py con2016_lightingtalk_php to python
PDF
라이트닝 토크 2015 파이콘
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
게임으로 배우는 코딩 - 마인크래프를 중심으로
개발자, 그 이상 그리고 그 이하
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
PostgreSQL로 배우는 SQL 기초
암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관
사물 인터넷과 인공지능이 만나는 세계
인간이 아이에게 줄 수 있는 가장 최선의 것
파이콘 2017 그만퇴근합시다_이지호
소물 2017 네트워크로 감성 나누기
10월의 하늘_2016_진도 공공도서관_이지호
생각과 프로그램 개발 - 10월, 소프트웨어에 물들다
책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...
2016 py con2016_lightingtalk_php to python
라이트닝 토크 2015 파이콘

Django와 flask

  • 1. Django 와 Flask 이지호 (Freelancer) search5@gmail.com
  • 2. 2016.07.08 Django 와 Flask 2 목차 0. 공통 ( 가상 환경 구축 ) 1. 웹 사이트 프로젝트 시작하기 2. Django 뷰와 Flask 뷰 차이 3. Django Form 과 WTForms 4. Django 와 Flask 로 중대형 사이트 구축 5. Django 와 Flask 와 Route 구현 6. Django 와 Flask 와 데이터 모델 구현 7. Django 와 Flask 의 데이터 모델 검증 8. Django 와 Flask 의 URL 구현 차이 9. Django 와 Flask 의 필터 , Reusable Component
  • 3. 2016.07.08 Django 와 Flask 3 0. 공통 ( 가상 환경 구축 ) & 모든 파이썬 프로젝트는 반드시 파이썬 가상환경 구축 & Python 2.x, 3.x = virtualenv & Python 3.x = pyvenv & Virtualenv 를 더 쉽게 = Virtualenvwrapper 그 외 .. Conda, pyenv, autoenv
  • 4. 2016.07.08 Django 와 Flask 4 웹 사이트 프로젝트 시작하기 Django: $ django-admin startproject <project_name> Flask: $ mkdir -p project_name/project_name $ touch project_name/project_name/__init__.py
  • 5. 2016.07.08 Django 와 Flask 5 Django 뷰와 Flask 뷰 차이 Django: - CBV(Class Based Views) - FBV(Function Based Views) Flask: - Pluggable View(View, MethodView) - Function View
  • 6. 2016.07.08 Django 와 Flask 6 Django 뷰와 Flask 뷰 차이 Django: - CBV(Class Based Views) Example from django.conf.urls import url from django.views.generic import TemplateView urlpatterns = [ url(r'^about/$', TemplateView.as_view(template_name="about.html")), ]
  • 7. 2016.07.08 Django 와 Flask 7 Django 뷰와 Flask 뷰 차이 Django: - FBV(Function Based Views) Example from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html) from django.conf.urls import url from . import views urlpatterns = [ url(r'^datetime/$', views.current_datetime) ]
  • 8. 2016.07.08 Django 와 Flask 8 Django 뷰와 Flask 뷰 차이 Flask View: - Pluggable View(View) Example from flask.views import View class ShowUsers(View): def dispatch_request(self): users = User.query.all() return render_template('users.html', objects=users) app.add_url_rule('/users/', view_func=ShowUsers.as_view('show_users'))
  • 9. 2016.07.08 Django 와 Flask 9 Django 뷰와 Flask 뷰 차이 Flask View: - Pluggable View(Method View) Example class UserAPI(MethodView): decorators = [user_required] def get(self, user_id): pass def post(self): # create a new user pass def delete(self, user_id): # delete a single user pass
  • 10. 2016.07.08 Django 와 Flask 10 Django 뷰와 Flask 뷰 차이 Flask View: - Function Based View Example @app.route('/users/') def show_users(page): users = User.query.all() return render_template('users.html', users=users)
  • 11. 2016.07.08 Django 와 Flask 11 Django Form 과 WTForms Django Models 객체를 통해 Template 에서 호출 Example Model: from django.db import models class Question(models.Model): tag = models.CharField(max_length=200) Template: {{ form.tag.label_tag }} {{ form.tag }}
  • 12. 2016.07.08 Django 와 Flask 12 Django Form 과 WTForms WTForms 를 통해 템플릿 구축하기 Example from wtforms import Form, StringField, validators class RegistrationForm(Form): username = StringField('Username', [validators.Length(min=4, max=25)]) email = StringField('Email Address', [validators.Length(min=6, max=35)])
  • 13. 2016.07.08 Django 와 Flask 13 Django Form 과 WTForms WTForms 를 통해 템플릿 구축하기 Example {% macro render_field(field) %} <dt>{{ field.label }} <dd>{{ field(**kwargs)|safe }} {% if field.errors %} <ul class=errors> {% for error in field.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} </dd> {% endmacro %}
  • 14. 2016.07.08 Django 와 Flask 14 Django 와 Flask 로 중대형 사이트 구축 Django 로 구축하기 $ django-admin startproject <project_name> $ cd project_name $ ./manage.py startapp <app_name> Flask 로 구축하기 $ mkdir -p <project_name>/<project_name> $ touch <project_name>/<project_name>/__init__.py 1) Blueprint 모듈 만들어서 추가 2) url 만 정의된 파일 작성해서 임포트하기
  • 15. 2016.07.08 Django 와 Flask 15 Django 와 Flask 와 Route 구현 Django: urls.py 구현 urlpatterns 변수 재정의 urlpatterns = [ url(r'^datetime/$', views.current_datetime) ] Flask: function: app.add_url_rule, app.register_blueprint decorator: app.route
  • 16. 2016.07.08 Django 와 Flask 16 Django 와 Flask 와 데이터 모델 구현 Django Model File from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) Result: <Model Result> CREATE TABLE myapp_person ( "id" serial NOT NULL PRIMARY KEY, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL );
  • 17. 2016.07.08 Django 와 Flask 17 Django 와 Flask 와 데이터 모델 구현 Flask - Database File from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker from sqlalchemy.ext.declarative import declarative_base engine = create_engine('sqlite:////tmp/test.db', convert_unicode=True) db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine)) Base = declarative_base() Base.query = db_session.query_property() def init_db(): import yourapplication.models Base.metadata.create_all(bind=engine)
  • 18. 2016.07.08 Django 와 Flask 18 Django 와 Flask 와 데이터 모델 구현 Flask - Model File from sqlalchemy import Column, Integer, String from yourapplication.database import Base class User(Base): __tablename__ = 'users' first_name = Column(String(30), nullable=False) last_name = Column(String(30), nullable=False)
  • 19. 2016.07.08 Django 와 Flask 19 Django 와 Flask 의 데이터 모델 검증 Django from django.core.exceptions import ValidationError from django.utils.translation import ugettext_lazy as _ def validate_even(value): if value % 2 != 0: raise ValidationError( _('%(value)s is not an even number'), params={'value': value}, ) from django.db import models class MyModel(models.Model): even_field = models.IntegerField(validators=[validate_even])
  • 20. 2016.07.08 Django 와 Flask 20 Django 와 Flask 의 데이터 모델 검증Django - View 에서 처리 form = MyModel(request.POST) 검증 : form.is_valid() 유효성을 통과한 데이터 : form.cleaned_data 에러 내용 : form.erros Flask - View 에서 처리 form = MyModel(request.form) 검증 : form.validate() 검증이 완료된 데이터 객체 복사해오기 : populate_obj 에러 내용 : form.erros
  • 21. 2016.07.08 Django 와 Flask 21 Django 와 Flask 의 URL 구현 차이 Django Backend: reverse, reverse_lazy 함수 사용 Template: {% url %} 태그 사용 Flask Backend 와 Template 모두 url_for(end_point, **kwargs) 사용
  • 22. 2016.07.08 Django 와 Flask 22 Django 와 Flask 의 필터 , Reusable Component Django - Custom Tag - Custom Filter Flask Filter - Custom Tag( 단 , Extension 클래스 상속 구현 ) - Custom Filter - Reusable Component(macro)
  • 23. 2016.07.08 Django 와 Flask 23 Django 와 Flask 의 필터 , Reusable Component Django - Custom Tag from django import template register = template.Library() @register.simple_tag def my_tag(a, b, *args, **kwargs): warning = kwargs['warning'] profile = kwargs['profile'] ... return ...
  • 24. 2016.07.08 Django 와 Flask 24 Django 와 Flask 의 필터 , Reusable Component Django - Custom Filter from django import template register = template.Library() @register.filter(is_safe=True) def add_xx(value): return '%sxx' % value
  • 25. 2016.07.08 Django 와 Flask 25 Django 와 Flask 의 필터 , Reusable Component Flask - Custom Filter, Global Function @app.template_filter('filter_name') def int_add(d, b): return d+b @app.template_global('global_name') def int_minus(d, b): return d-b Flask - Custom Variable @app.context_processor def utility_processor(): return dict(name='fastcampus')
  • 26. 2016.07.08 Django 와 Flask 26 Django 와 Flask 의 필터 , Reusable Component Flask – Reusable Component (Macro) {% macro input(name, value='', type='text', size=20) - %} <input type="{{ type }}" name="{{ name }}" value="{{ value|e }}" size="{{ size }}"> {%- endmacro %} {{ input('tt') }}
  • 27. 2016.07.08 Django 와 Flask 27 백엔드 개발자가 가져야 할 스탠스 1) 테스트케이스 작성과 회귀 테스트 - Flask는 test_client 메서드로 테스트 브라우저 생성 - 회귀 테스트는 travis-CI, Jenkins-CI 사용 권장 2) 소스 저장소 일원화 - 회사에서 사용하는 저장소 일원화(ex, Gitlab, BitBucket 등) 3) 외부 라이브러리 조사 및 정리 - 프로그램 개발 과정에서 새로운 라이브러리의 사용이나 기존에 사용된 라이브러리의 사용방법이나 문제사항을 정 리한 기술 노트(오프라인 및 온라인 도구 사용-위키, 에버노 트, 원노트 등)
  • 28. 2016.07.08 Django 와 Flask 28 백엔드 개발자가 가져야 할 스탠스 4) 그리고 동료들과 끊임없는 대화와 배려를 통한 협업 무엇보다 백엔드 개발자로서 백엔드 프로그램을 안정적으 로 유지할 수 있도록 개발 PC → 테스트 서버 → 스테이지 서버 → 운영 서버 로 나눠서 작업할 수 있도록 팀에 제안 및 이끌어야 합니다.
  • 29. 2016.07.08 Django 와 Flask 29 Thanks