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

What's hot

처음배우는 자바스크립트, 제이쿼리 #1
처음배우는 자바스크립트, 제이쿼리 #1처음배우는 자바스크립트, 제이쿼리 #1
처음배우는 자바스크립트, 제이쿼리 #1성일 한
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Kyoung Up Jung
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4성일 한
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPTJinKyoungHeo
 
레거시 시스템에 Django 들이밀기
레거시 시스템에 Django 들이밀기레거시 시스템에 Django 들이밀기
레거시 시스템에 Django 들이밀기Jiyong Jung
 
Django in Production
Django in ProductionDjango in Production
Django in ProductionHyun-woo Park
 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&httpDong Jun Kwon
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!WooYoung Cho
 
헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리은숙 이
 
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는Taegon Kim
 
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)성일 한
 
5-5. html5 connectivity
5-5. html5 connectivity5-5. html5 connectivity
5-5. html5 connectivityJinKyoungHeo
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brickyongwoo Jeon
 
안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트병한 유
 
처음배우는 자바스크립트, 제이쿼리 #3
처음배우는 자바스크립트, 제이쿼리 #3처음배우는 자바스크립트, 제이쿼리 #3
처음배우는 자바스크립트, 제이쿼리 #3성일 한
 

What's hot (20)

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

Viewers also liked

파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)성일 한
 
파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)성일 한
 
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)성일 한
 
Python과 flask 입문(1)
Python과 flask 입문(1)Python과 flask 입문(1)
Python과 flask 입문(1)성천 이
 
과학데이터와연구소재
과학데이터와연구소재과학데이터와연구소재
과학데이터와연구소재Suntae Kim
 
Postgres NoSQL - Delivering Apps Faster
Postgres NoSQL - Delivering Apps FasterPostgres NoSQL - Delivering Apps Faster
Postgres NoSQL - Delivering Apps FasterEDB
 
MartinezMarjorie-DevCon Summit Certificate of Participation
MartinezMarjorie-DevCon Summit Certificate of ParticipationMartinezMarjorie-DevCon Summit Certificate of Participation
MartinezMarjorie-DevCon Summit Certificate of ParticipationMarjorie Martinez
 
We Buy Cheese in a Cheese Shop
We Buy Cheese in a Cheese ShopWe Buy Cheese in a Cheese Shop
We Buy Cheese in a Cheese ShopTzu-ping Chung
 
Android Trends @ DevCon Summit 2016
Android Trends @ DevCon Summit 2016Android Trends @ DevCon Summit 2016
Android Trends @ DevCon Summit 2016AppCoins
 
Introduction to Python
Introduction to PythonIntroduction to Python
Introduction to PythonBogdan Sabău
 
Build website in_django
Build website in_django Build website in_django
Build website in_django swee meng ng
 
Open cv with processing
Open cv with processingOpen cv with processing
Open cv with processingcjoeltorres
 
Quick flask an intro to flask
Quick flask   an intro to flaskQuick flask   an intro to flask
Quick flask an intro to flaskjuzten
 
Django ORM 왜 어렵게 느껴질까?
Django ORM 왜 어렵게 느껴질까?Django ORM 왜 어렵게 느껴질까?
Django ORM 왜 어렵게 느껴질까?Kyoung Up Jung
 
Writing your first web app using Python and Flask
Writing your first web app using Python and FlaskWriting your first web app using Python and Flask
Writing your first web app using Python and FlaskDanielle Madeley
 
LvivPy - Flask in details
LvivPy - Flask in detailsLvivPy - Flask in details
LvivPy - Flask in detailsMax Klymyshyn
 
Python, Development Environment for Windows
Python, Development Environment for WindowsPython, Development Environment for Windows
Python, Development Environment for WindowsKwangyoun Jung
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 YoungSu Son
 

Viewers also liked (20)

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

Similar to Django와 flask

Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015sung yong jung
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기Jeado Ko
 
AngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSAngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSKenneth Ceyer
 
Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicJdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicknight1128
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나JeongHun Byeon
 
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
2013 JCO tipJS.com JavaScript MVC framework
2013 JCO tipJS.com JavaScript MVC framework2013 JCO tipJS.com JavaScript MVC framework
2013 JCO tipJS.com JavaScript MVC frameworkSeung-Hyun PAEK
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)beom kyun choi
 
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]WSConf.
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs기동 이
 
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사Rjs Ryu
 
다시보는 Angular js
다시보는 Angular js다시보는 Angular js
다시보는 Angular jsJeado Ko
 
Python codelab1
Python codelab1Python codelab1
Python codelab1건희 김
 

Similar to Django와 flask (20)

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

More from Jiho Lee

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

More from Jiho Lee (15)

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

Recently uploaded

암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEETSoftwide Security
 
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외Jay Park
 
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일justuser0129
 
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptxcho9759
 
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPTpcupcu20831004
 
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라Jay Park
 
INU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintINU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintahghwo99
 

Recently uploaded (7)

암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
 
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
 
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
 
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
 
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
 
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
 
INU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintINU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrint
 

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