SlideShare una empresa de Scribd logo
1 de 82
Django 1.5 における効果的な MTV 設計 & ネイティブApp
@luyikei
自己紹介
● @luyikei
●
Linux Mint, Qt, Django が好きです
内容
1, DjangoでMTVデザインパターンを最も有効に活用するには
 Model : 1, Model Relationships
2, Mata Options
 Template : 1, Python Template Engine
2, Custom tags and filters
 View : 1, Sessions
2, Cookie
3, Cache
 
 
内容
2,ネイティブアプリケーションとの連携
 API の実装
 OAuth の実装
 クライアント側の処理 (PyQt 使用)
 
MTV デザインパターンを最も有効に活用するには
MTV とは
Django appears to be a MVC
framework, but you call the
Controller the “view”, and the
View the “template”. How come
you don’t use the standard names?¶
(https://docs.djangoproject.com/en/dev/faq/general/ より)
なぜ MVC じゃなく MTV なの?
さらに、テンプレートによってコンテンツとプレゼンテーションの分離がはっ
きり しています。Django では、ビューはどのデータを提示するかを決めてい
ますが、 ビューは通常、 どのように データを提示するかをテンプレートに委
ねます。
では、「コントローラ」はどこに入るのでしょうか。 Django の場合、おそら
くフ レームワーク、すなわち URL 設定にしたがってリクエストを適切な
ビューに送信す る機構自体がコントローラにあたるといえるでしょう。
( http://www.djangoproject.jp/doc/ja/1.0/faq/general.html )
つまり MVC とは少し違ったデザインパターンで
ある
ということである
Model : 1, Model Relationships
簡易 商品管理 サイトを構築する。
- モデルは 「サンドイッチ, おにぎり」
- 一括で管理したい場合はどうするか
Model - サンドイッチ
Title : “シャキシャキレタス”
Price : 220
Vegetable : “Lettuce”
Meat : “Ham”
OnEgg : True
Model - おにぎり
Title : “手巻おにぎり 紅しゃけ”
Price : 136
Guzai : “Salmon”
モデルの継承を使用
class Item(models.Model):
title = models.CharField(max_length=200)
price = models.IntegerField()
Model “サンドイッチ”を定義
class Sandwich(Item):
vegetable = models.CharField(max_length=200)
meat = models.CharField(max_length=200)
onEgg = models.BooleanField(default=False)
Model “おにぎり” を定義
class Onigiri(Item):
Guzai = models.CharField(max_length=200)
Item の子モデルの取得
Onigiri の場合。
Item.onigiri
Sandwich の場合
Item.sandwich
子モデルは種類がわかっている時のみ取得でき
る!
子モデルを取得する方法
class Item(models.Model):
title = models.CharField(max_length=200)
price = models.IntegerField()
subclass =
models.CharField(max_length=200,editable=False)
def save(self, *args, **kwargs):
# save what kind we are.
self.subclass = self.__class__.__name__
super(Item, self).save(*args, **kwargs)
子モデル取得関数
def as_child(self):
return getattr(self, self.subclass.lower())
例:
i=Item.objects.get(id=1)
child=i.as_child()
どう動くか見てみましょう
Model : 2, Mata Options
Django のモデルの情報を取得するのに
Meta オプションは重宝します
Django Models Internals Documentation
https://django-model-_meta-
reference.readthedocs.org/en/latest/index.html
get_all_related_objects_with_model
Returns a list of (related-object, model) pairs. Similar to
get_fields_with_model().
Related オブジェクトのペアのリストを返します
例:
[(<RelatedObject: common:sandwich related to item_ptr>, None),
(<RelatedObject: common:onigiri related to item_ptr>, None)]
get_parent_list
Returns a list of all the ancestor of this model as a list. Useful for
determining if something is an ancestor, regardless of lineage.
全てのこのモデルの親(先祖)のリストを返します
(私の実機では list ではなく set オブジェクトでした)
例:
set([<class 'common.models.Item'>])
get_latest_by
model Manager の latest() , earliest() メソッドで返さ
れるオブジェクトの判断基準を設定
例:
get_latest_by = "order_date"
ordering
オブジェクトのリストを取得するときに使われ
る、オブジェクトのデフォルトの並び順規則を設
定
例:
ordering = ['-order_date']
db_table
モデルの使うデータベーステーブルの名前
例:
db_table = 'music_album'
Template : 1, Python Template Engine
・Django Template
・Jinja2
・Mako
・Chameleon
Django Template
・Django 標準のテンプレートエンジン
・Django のテンプレート言語は、釣合いの取れたパワーと簡便さを実現するように、 また HTML を扱い
なれた人にとっては快適になるように設計されています。 Smarty や CheetahTemplate のようなテキスト
ベースのテンプレート言語を経験 したことがあるなら、 Django のテンプレートはしっくりくるはずで
す。
・プログラミングの知識があったり、 PHP のようなプログラムコードを直接 HTML に混ぜ込む言語を
使ったことがあるなら、 Django のテンプレートシステ ムが単に HTML に Python を埋め込んだものでない
ことに疑問を持つでしょう。 しかし、これは設計上意図して決まっていることです。テンプレートシステ
ム はプレゼンテーション層を表現するためのもので、プログラムロジックではな いのです。
・http://docs.djangoproject.jp/en/latest/topics/templates.html
簡潔で可読性の高いコード
Test[“a”] → {{ Test.a }}
Test[“a”][“b”] → {{ Test.a.b }}
Test[a].b() → {{ Test.a.b }}
Test.a.b → {{ Test.a.b }}
Jinja 2
・Django Template のパワーアップ版
・書式はほぼ同じなので移植しやすい
・高速
・おすすめ!
Django Template との比較
・Method Calls
例: a.b() → {{ a.b() }} (必ず)
a[“b”] → {{ a[“b“] }} (任意)
・Conditions
例: {% ifequal a b %} が無効。
代わりに {% if a == b%} を使用。
・Filter Arguments
例: {{ items|join:", " }} → {{ items|join(', ') }}
Mako
<%inherit file="base.html"/>
<%
rows = [[v for v in range(0,10)] for row in range(0,10)]
%>
<table>
% for row in rows:
${makerow(row)}
% endfor
</table>
<%def name="makerow(row)">
<tr>
% for name in row:
<td>${name}</td>
% endfor
</tr>
</%def>
Mako = 高機能
先ほどのコードを見てみると Django Template では
とてもではないが表現できるものではないことがわかる。
コードの可読性は Django より劣る傾向にあるだろう
しかし表現の幅は広がるだろう
正確で厳しいコード
Test[“a”] → ${ Test[“a”] }
Test[“a”][“b”] → ${ Test[“a”][“b”] }
Test[a].b() → ${ Test[a].b() }
Test.a.b → ${ Test.a.b }
Chameleon
<html>
<meta>
<title tal:content="context.title" />
</meta>
<body>
<div tal:condition="items">
<p>These are your items:</p>
<ul>
<li tal:repeat="item items" tal:content="item" />
</ul>
</div>
</body>
</html>
Chameleon TAL≒
・TAL とは Zope のテンプレートエンジン
・Chameleon はそれをベースに改良したテンプ
レートエンジン
・XMLベース
Django の XML ベーステンプレートエンジンに対する 評価
①
「それは、 Django のテンプレート言語を XML/HTML テンプレート
以外にも使いたいと考えているからです。 」
Django テンプレートエンジンについて
「World Online では、email や JavaScript、 CSV にテンプレートを
使っています。テンプレートはテキストベースの形式なら何にでも
使 えるのです。」
http://docs.djangoproject.jp/ja/latest/topics/templates.html
まず・・・
例:
polls/
models.py
templatetags/
__init__.py
poll_extras.py
views.py
カスタムテンプレートタグ・フィルターは Django アプリケーションのフォルダ内の templatetags
フォルダ内のファイルに記述
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/
Django の XML ベーステンプレートエンジンに対する 評価
②
そう、もう一つあります:
人間に XML を編集させるなんて、
サディスティック でしかありません!
http://docs.djangoproject.jp/ja/latest/topics/templates.html
Template : 2, Custom tags and filters
今回は Django Template において説明します
django/template/defaultfilters.py
from django.template.base import Library
register = Library()
@register.filter(is_safe=True)
@stringfilter
def lower(value):
"""Converts a string into all lowercase."""
return value.lower()
Django のソースを読むとわかる!
テンプレートのフィルターの書き方は
Python の 関数 の書き方と同じ!
まず・・・
例:
polls/
models.py
templatetags/
__init__.py
poll_extras.py
views.py
カスタムテンプレートタグ・フィルターは Django アプリケーションのフォルダ内の templatetags
フォルダ内のファイルに記述
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/
フィルターを登録
例:
from django.template.base import Library
register = Library()
@register.filter()
def nothing(value):
pass
フィルターを登録し完了
タグの場合も同じく
例:
from django.template.base import Library
register = Library()
@register.tag
def nothing(value):
pass
タグを登録し完了
View : 1, Sessions
セッションとは
ユーザがあるサイトを訪れてからそこを離れるまでの一連の
通信。
HTTP自体にはユーザを識別する機能が存在しないの
で、Cookieなどを使用して同一人物か否かを識別する。
たとえば、はてなにログインしてからログアウトするまでの
すべての操作は一つのセッションと考えられる。
http://d.hatena.ne.jp/keyword/%A5%BB
%A5%C3%A5%B7%A5%E7%A5%F3
変数の保存
例:
request.session[“Height”] = 120
変数の取得
例:
request.session.get('Height', 0):
get(key, default=None)
例: fav_color = request.session.get('fav_color', 'red')
変数の削除
例:
del request.session[“Height”]
簡単!
View : 2, Cookie
クッキーの保存
HttpResponse.set_cookie(key, value='', max_age=None, expires=None, path='/',
domain=None, secure=None, httponly=False)
例:
response = render_to_response(template_name, context)
response.set_cookie('Height', ')
return response
HttpResponse.set_cookie であることに注意
クッキーの取得
例:
request.COOKIES.get('Height')
簡単!
View : 3, Cache
キャッシュとは
使用頻度の高いデータを高速な記憶装置に蓄えておくことに
より、いちいち低速な装置から読み出す無駄を省いて高速化
すること。また、その際に使われる高速な記憶装置や、複製
されたデータそのもののこと。
http://e-words.jp/w/E382ADE383A3E38383E382B7E383A5.html
キャッシュの設定
Memcached
データベースを使ったキャッシュ
データベースを使ったキャッシュと、マルチデータ
ベース
ファイルシステムを使ったキャッシュ
ローカルメモリ上のキャッシュ
ダミーキャッシュ (開発用)
例:Memcached
settings.py に
CACHES = {
'default': {
'BACKEND':
'django.core.cache.backends.memcached.MemcachedC
ache',
'LOCATION': '127.0.0.1:11211',
}
}
サイト単位のキャッシュ
MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
)
http://docs.djangoproject.jp/en/latest/topics/cache.html#id10
ビュー単位のキャッシュ
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):
…
又は
from django.views.decorators.cache import cache_page
urlpatterns = ('',
(r'^foo/(d{1,2})/$', cache_page(60 * 15)(my_view)),
)
http://docs.djangoproject.jp/en/latest/topics/cache.html#id10
テンプレートの部分的キャッシュ
{% load cache %}
{% cache 500 sidebar %}
.. sidebar ..
{% endcache %}
http://docs.djangoproject.jp/en/latest/topics/cache.html#id10
2,ネイティブアプリケーションとの
連携
ネイティブアプリケーション
ネイティブアプリケーションとの連携について
実際にはクライアントの作成に等しいが、
Django の ネイティブアプリケーション のクライ
アントの作成事例を中々見かけないのでこの題に
設定した。
Qt を使用し実装してみる
まずは OAuth の説明
OAuth とは・・・
・「OAuth (オー オース[1]) は、ブレイン・クックとクリス・メッ
シーナが始めたオープンプロトコルであり、デスクトップ、モバ
イル、WebアプリケーションなどにセキュアなAPI認可
(authorization) の標準的手段を提供する。」(Wikipedia)
・要は API 用の認証手段である
詳しい説明
● http://www.atmarkit.co.jp/fsecurity/rensai/digid01/02.htm
準備
●
Django の OAuth2 実装に
django-oauth-plus を使用。
●
Django の API 実装に
django-tastypie を使用。
INSTALLED_APPS に以下を追記
INSTALLED_APPS = (
'tastypie',
'oauth_provider',
)
まずは API を実装
common/api.py
from tastypie.resources import ModelResource
from common.models import Onigiri
class OnigiriResource(ModelResource):
class Meta:
queryset = Onigiri.objects.all()
resource_name = 'onigiri
Urlsの編集
ecsite/urls.py
from tastypie.api import Api
from django.contrib import admin
admin.autodiscover()
onigiri_resource = OnigiriResource()
v1_api = Api(api_name='v1')
v1_api.register(OnigiriResource())
urlpatterns = patterns('',
url(r'^api/', include(onigiri_resource.urls)),
)
完成!(例)
$ curl http://127.0.0.1:8000/api/v1/onigiri/?format=json
{"meta": {"limit": 20, "next": null, "offset": 0, "previous": null,
"total_count": 1}, "objects": [{"guzai": "gre", "id": 1, "price": 436,
"resource_uri": "/admin/v1/onigiri/1/", "subclass": "Onigiri", "title":
"sdg"}]}
しかしこの状態では
However, if you try sending a POST/PUT/DELETE to the resource,
you find yourself getting “401 Unauthorized” errors. For safety,
Tastypie ships with the authorization class (“what are you allowed to do”) set to
ReadOnlyAuthorization. This makes it safe to expose on the web, but prevents
us from doing POST/PUT/DELETE. Let’s enable those:
http://django-tastypie.readthedocs.org/en/latest/tutorial.html
POST/PUT/DELETE が使用できない
→ つまり API として利用するには取得しか出来ない!
認証・権限の実装
common/api.py
from tastypie.authentication import OAuthAuthentication
from tastypie.authorization import DjangoAuthorization
from tastypie.resources import ModelResource
from common.models import Onigiri
class OnigiriResource(ModelResource):
class Meta:
queryset = Onigiri.objects.all()
resource_name = 'onigiri
authentication = OAuthAuthentication()
authorization = DjangoAuthorization
同じコマンドを実行
$ curl http ://127.0.0.1:8000/api/v1/onigiri/?format=json
Invalid request parameters.
OAuth実装完了!
検証: Consumer を作成
$ ./manage.py shell
>>> from oauth_provider.models import Consumer, Token
>>> c = Consumer()
>>> c.generate_random_codes()
>>> c
<Consumer: Consumer with key b10945ea448344bb8d2c7f33d38f2f0d>
>>> c.key
u'b10945ea448344bb8d2c7f33d38f2f0d'
>>> c.secret
U'AQsJnvVYn04njIVK'
http://d.hatena.ne.jp/yuheiomori0718/20120924/1348496794
検証: Token を作成
$ ./manage.py shell
>>> from django.contrib.auth.models import User
>>> u = User.objects.all()[0]
>>> t = Token()
>>> t.user = u
>>> t.consumer = c
>>> t.token_type = 2
>>> t.resource_id=0
>>> t.generate_random_codes()
>>> t.key
'bec4fdc33725458ab2894558014844b7'
>>> t.secret
U'WgKrSb7QMz9CLZyX'
http://d.hatena.ne.jp/yuheiomori0718/20120924/1348496794
ここでこのコマンドを実行
# coding=utf-8
import json
import requests
from oauth_hook import OAuthHook
consumer_key = 'b10945ea448344bb8d2c7f33d38f2f0d'
consumer_secret = 'AQsJnvVYn04njIVK'
access_token = 'bec4fdc33725458ab2894558014844b7'
access_token_secret = 'WgKrSb7QMz9CLZyX'
oauth_hook = OAuthHook(access_token=access_token,
access_token_secret=access_token_secret,
consumer_key=consumer_key,
consumer_secret=consumer_secret,
header_auth=True)
request = requests.Request('GET', "http://127.0.0.1:8000/api/v1/onigiri/?format=json")
request = oauth_hook(request)
prepared = request.prepare()
session = requests.session()
resp = session.send(prepared)
print resp.text
結果は
{"meta": {"limit": 20, "next": null, "offset": 0, "previous": null,
"total_count": 1}, "objects": [{"guzai": "gre", "id": 1, "price": 436,
"resource_uri": "/api/v1/onigiri/1/", "subclass": "Onigiri", "title":
"sdg"}]}
PyQt で実装
おわり!

Más contenido relacionado

La actualidad más candente

WordPressプラグイン作成入門
WordPressプラグイン作成入門WordPressプラグイン作成入門
WordPressプラグイン作成入門Yuji Nojima
 
Behatで行う、E2Eテスト入門
Behatで行う、E2Eテスト入門Behatで行う、E2Eテスト入門
Behatで行う、E2Eテスト入門leverages_event
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2Nishida Kansuke
 
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4アシアル株式会社
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義ria1201
 
concrete5デザインカスタマイズに必要なPHPの知識
concrete5デザインカスタマイズに必要なPHPの知識concrete5デザインカスタマイズに必要なPHPの知識
concrete5デザインカスタマイズに必要なPHPの知識Hishikawa Takuro
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門晃 遠山
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterMasanori Oobayashi
 
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...Kazuhiro Hara
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniterYuya Matsushima
 
プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~
プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~
プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~Takeuchi Yuichi
 
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~takenao
 
101210 supreme web adobe seminar Nagoya
101210 supreme web adobe seminar Nagoya101210 supreme web adobe seminar Nagoya
101210 supreme web adobe seminar Nagoyatamotsu toyoda
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
第21回Creators MeetUp
第21回Creators MeetUp第21回Creators MeetUp
第21回Creators MeetUpKenichi Mukai
 
安全なテーマ作成のためのPHPの知識
安全なテーマ作成のためのPHPの知識安全なテーマ作成のためのPHPの知識
安全なテーマ作成のためのPHPの知識Fumito Mizuno
 

La actualidad más candente (20)

WordPressプラグイン作成入門
WordPressプラグイン作成入門WordPressプラグイン作成入門
WordPressプラグイン作成入門
 
20120118 titanium
20120118 titanium20120118 titanium
20120118 titanium
 
Behatで行う、E2Eテスト入門
Behatで行う、E2Eテスト入門Behatで行う、E2Eテスト入門
Behatで行う、E2Eテスト入門
 
AngularJS入門
AngularJS入門AngularJS入門
AngularJS入門
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
 
Magento cafe plus #12
Magento cafe plus #12Magento cafe plus #12
Magento cafe plus #12
 
concrete5デザインカスタマイズに必要なPHPの知識
concrete5デザインカスタマイズに必要なPHPの知識concrete5デザインカスタマイズに必要なPHPの知識
concrete5デザインカスタマイズに必要なPHPの知識
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~
プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~
プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~
 
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
 
101210 supreme web adobe seminar Nagoya
101210 supreme web adobe seminar Nagoya101210 supreme web adobe seminar Nagoya
101210 supreme web adobe seminar Nagoya
 
WDHA#29 a-blog cms
WDHA#29 a-blog cmsWDHA#29 a-blog cms
WDHA#29 a-blog cms
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
第21回Creators MeetUp
第21回Creators MeetUp第21回Creators MeetUp
第21回Creators MeetUp
 
安全なテーマ作成のためのPHPの知識
安全なテーマ作成のためのPHPの知識安全なテーマ作成のためのPHPの知識
安全なテーマ作成のためのPHPの知識
 

Destacado

Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編- Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編- Hironori Sekine
 
サンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミングサンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミングYikei Lu
 
Qt Widget 入門① -様々なHello World編-
Qt Widget 入門① -様々なHello World編-Qt Widget 入門① -様々なHello World編-
Qt Widget 入門① -様々なHello World編-Yikei Lu
 
オープンソースとコミュニティによる価値の創造
オープンソースとコミュニティによる価値の創造オープンソースとコミュニティによる価値の創造
オープンソースとコミュニティによる価値の創造Rakuten Group, Inc.
 
楽天トラベルの開発プロセスに関して
楽天トラベルの開発プロセスに関して楽天トラベルの開発プロセスに関して
楽天トラベルの開発プロセスに関してRakuten Group, Inc.
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 

Destacado (8)

Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編- Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編-
 
サンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミングサンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミング
 
CLSx tokyo 2015 #0
CLSx tokyo 2015 #0CLSx tokyo 2015 #0
CLSx tokyo 2015 #0
 
Qt Widget 入門① -様々なHello World編-
Qt Widget 入門① -様々なHello World編-Qt Widget 入門① -様々なHello World編-
Qt Widget 入門① -様々なHello World編-
 
オープンソースとコミュニティによる価値の創造
オープンソースとコミュニティによる価値の創造オープンソースとコミュニティによる価値の創造
オープンソースとコミュニティによる価値の創造
 
楽天トラベルの開発プロセスに関して
楽天トラベルの開発プロセスに関して楽天トラベルの開発プロセスに関して
楽天トラベルの開発プロセスに関して
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
MVC 03
MVC 03MVC 03
MVC 03
 

Similar a Django 1.5 における効果的な MTV 設計 & ネイティブApp

Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
symfonyで汎用設定値を読み書きするモデル等をプラグインにした話
symfonyで汎用設定値を読み書きするモデル等をプラグインにした話symfonyで汎用設定値を読み書きするモデル等をプラグインにした話
symfonyで汎用設定値を読み書きするモデル等をプラグインにした話Hidenori Goto
 
Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門cch-robo
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Hiro Yoshioka
 
Getting Started with Graph Database with Python
Getting Started with Graph Database with PythonGetting Started with Graph Database with Python
Getting Started with Graph Database with Pythonロフト くん
 
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要Akira Inoue
 
HTML5コーディング環境を Dreamweaverで構築する
HTML5コーディング環境を Dreamweaverで構築するHTML5コーディング環境を Dreamweaverで構築する
HTML5コーディング環境を Dreamweaverで構築するAkira Maruyama
 
Azure Machine Learning アップデートセミナー 20191127
Azure Machine Learning アップデートセミナー 20191127Azure Machine Learning アップデートセミナー 20191127
Azure Machine Learning アップデートセミナー 20191127Keita Onabuta
 
2005 07 30_xwj_customizinig
2005 07 30_xwj_customizinig2005 07 30_xwj_customizinig
2005 07 30_xwj_customizinigTom Hayakawa
 
Eclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテストEclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテストAtsuhiro Kubo
 
JMeterをWebでしか設定できないサーバの設定自動化に使う
JMeterをWebでしか設定できないサーバの設定自動化に使うJMeterをWebでしか設定できないサーバの設定自動化に使う
JMeterをWebでしか設定できないサーバの設定自動化に使う隆行 神戸
 
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!yoshikawa_t
 
実践で学んだLog Analytics
実践で学んだLog Analytics実践で学んだLog Analytics
実践で学んだLog AnalyticsTetsuya Odashima
 
開発初心者のためのMoodleプラグインの開発と利用(第二部) for Moodle Moot 2015
開発初心者のためのMoodleプラグインの開発と利用(第二部) for Moodle Moot 2015開発初心者のためのMoodleプラグインの開発と利用(第二部) for Moodle Moot 2015
開発初心者のためのMoodleプラグインの開発と利用(第二部) for Moodle Moot 2015Shigeharu Yamaoka
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)Shoji Haraguchi
 
【de:code 2020】 アマダの Azure への取り組みと DevOPS・MLOPS 環境の構築と運用
【de:code 2020】 アマダの Azure への取り組みと DevOPS・MLOPS 環境の構築と運用【de:code 2020】 アマダの Azure への取り組みと DevOPS・MLOPS 環境の構築と運用
【de:code 2020】 アマダの Azure への取り組みと DevOPS・MLOPS 環境の構築と運用日本マイクロソフト株式会社
 
Mvc conf session_2_shibamura
Mvc conf session_2_shibamuraMvc conf session_2_shibamura
Mvc conf session_2_shibamuraHiroshi Okunushi
 
Django Rest Frameworkでお手軽にREST APIを作る
Django Rest Frameworkでお手軽にREST APIを作るDjango Rest Frameworkでお手軽にREST APIを作る
Django Rest Frameworkでお手軽にREST APIを作るMatsuo Keita
 
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門Hirokazu Nishi
 

Similar a Django 1.5 における効果的な MTV 設計 & ネイティブApp (20)

Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
symfonyで汎用設定値を読み書きするモデル等をプラグインにした話
symfonyで汎用設定値を読み書きするモデル等をプラグインにした話symfonyで汎用設定値を読み書きするモデル等をプラグインにした話
symfonyで汎用設定値を読み書きするモデル等をプラグインにした話
 
Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010
 
Getting Started with Graph Database with Python
Getting Started with Graph Database with PythonGetting Started with Graph Database with Python
Getting Started with Graph Database with Python
 
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
 
HTML5コーディング環境を Dreamweaverで構築する
HTML5コーディング環境を Dreamweaverで構築するHTML5コーディング環境を Dreamweaverで構築する
HTML5コーディング環境を Dreamweaverで構築する
 
Azure Machine Learning アップデートセミナー 20191127
Azure Machine Learning アップデートセミナー 20191127Azure Machine Learning アップデートセミナー 20191127
Azure Machine Learning アップデートセミナー 20191127
 
2005 07 30_xwj_customizinig
2005 07 30_xwj_customizinig2005 07 30_xwj_customizinig
2005 07 30_xwj_customizinig
 
Eclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテストEclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテスト
 
JMeterをWebでしか設定できないサーバの設定自動化に使う
JMeterをWebでしか設定できないサーバの設定自動化に使うJMeterをWebでしか設定できないサーバの設定自動化に使う
JMeterをWebでしか設定できないサーバの設定自動化に使う
 
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!
 
実践で学んだLog Analytics
実践で学んだLog Analytics実践で学んだLog Analytics
実践で学んだLog Analytics
 
開発初心者のためのMoodleプラグインの開発と利用(第二部) for Moodle Moot 2015
開発初心者のためのMoodleプラグインの開発と利用(第二部) for Moodle Moot 2015開発初心者のためのMoodleプラグインの開発と利用(第二部) for Moodle Moot 2015
開発初心者のためのMoodleプラグインの開発と利用(第二部) for Moodle Moot 2015
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
【de:code 2020】 アマダの Azure への取り組みと DevOPS・MLOPS 環境の構築と運用
【de:code 2020】 アマダの Azure への取り組みと DevOPS・MLOPS 環境の構築と運用【de:code 2020】 アマダの Azure への取り組みと DevOPS・MLOPS 環境の構築と運用
【de:code 2020】 アマダの Azure への取り組みと DevOPS・MLOPS 環境の構築と運用
 
Mvc conf session_2_shibamura
Mvc conf session_2_shibamuraMvc conf session_2_shibamura
Mvc conf session_2_shibamura
 
Django Rest Frameworkでお手軽にREST APIを作る
Django Rest Frameworkでお手軽にREST APIを作るDjango Rest Frameworkでお手軽にREST APIを作る
Django Rest Frameworkでお手軽にREST APIを作る
 
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
 

Último

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Último (9)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

Django 1.5 における効果的な MTV 設計 & ネイティブApp