SlideShare a Scribd company logo
1
株式会社アシスト
山田 聡 @denzowill
Djangoで業務改善したくなった
2
だいたいこんな感じで生きてます
3
いままで
アプリケーションA
アプリケーションB
アプリケーションC
XMPP Connector
XMPP Connector Mechanize Wrapper
XMPP Connector
5
●
XMPP:オープンなチャットプロトコル
●
Mechanize: ブラウザをコードで操作
●
BeautifulSoup: Mechanizeの補助
●
IPMessenger: IPメッセンジャ
アプリケーションA
アプリケーションB
アプリケーションC
XMPP Connector
XMPP Connector Mechanize Wrapper
XMPP Connector
アプリケーションA
アプリケーションB
アプリケーションC
XMPP Connector
XMPP Connector Mechanize Wrapper
XMPP Connector
Ver 0.4
Ver 0.5
Ver 0.6
8
自作ライブラリが
時期によってばらばら
9
自作ライブラリが
時期によってばらばら
→いちいち更新がめんどくさい
アプリケーションA
アプリケーションA
アプリケーションB
アプリケーションC
XMPP Connector
Mechanize Wrapper
11
中央集権化
アプリケーションA
XMPP Connector
Mechanize Wrapper
Django
13
DjangoだとPythonを
WEB化しやすい
14
●
HTTPアクセスでJSONを戻すことにした
●
curlで連打されると情シスに怒られる
●
登録・認証しとかないとまずい
●
Djangoなら簡単っぽい?
15
├─IntraCtl -- イントラ操作を自動化
│ ├─lib
│ └─migrations
├─AuthCtl -- 認証処理
│ ├─lib
│ ├─migrations
│ └─templates
│ └─auth
├─static -- WEBサービスとしての静的ファイル
│ ├─css
│ ├─fonts
│ └─js
├─XmppCtl -- XmppのAPI提供
│ ├─lib
│ └─migrations
└─YmsftUtilServer -- Djangoのプロジェクト
16
# アクセス許可があるAPIアクセスかのチェック用のデコレータ
def check_access_permission(func):
import functools
@functools.wraps(func)
def wrapper(*args, **kwargs):
# 第一引数はrequestオブジェクト
request = args[0]
# host:port/apiname/xxxxx -> apiname
api_url = request.path.split("/")[1]
from_addr = get_client_ip(request)
token_key = request.META.get('HTTP_AUTHORIZATION')
if check_token_auth(api_url, from_addr, token_key):
return func(*args, **kwargs)
else:
return fobbiden_response()
return wrapper
Authoraization ヘッダをチェックするデコレータ
17
@comm.check_access_permission
def post_message(request):
ret_dict = {
u"error": None,
u"message": None
}
if request.method == 'POST':
form = XmppSendForm(request.POST)
if form.is_valid():
:
try:
stop_event = threading.Event()
exception_event = threading.Event()
xmpp_talker_inst = XmppTalker(sender_account, sender_password, ...)
:
xmpp_talker_inst.join()
except XWException as e:
ret_dict[u"error"] = True
ret_dict[u"message"] = e.message
else:
ret_dict[u"error"] = True
ret_dict[u"message"] = u"POST FORMAT ERROR[%s]" % form.errors.as_json()
return HttpResponse(
json.dumps(ret_dict),
content_type='application/json'
)
ほかのView層で使う
アプリケーションA
XMPP Connector
Mechanize Wrapper
Django
アプリケーション
Client
HTTP 通信必要なPOSTパラメータと
ヘッダがあればいい
19
class ClientSDKBase(object):
def __init__(self, server_url, token_key):
self.server_url = server_url
self.token_key = token_key
self.encoding = u"utf-8"
self.version = u"0.1"
@staticmethod
def _http_post(url, headers, base_params_dict):
response = {}
try:
params = urllib.urlencode(base_params_dict)
req = urllib2.Request(url, params, headers)
res = urllib2.urlopen(req)
response["body"] = res.read()
response["headers"] = res.info().dict
except urllib2.URLError as e:
raise YmsftSDKException(e.message)
ret_body = response["body"]
try:
return json.loads(ret_body)
except ValueError as e:
raise YmsftSDKException("When Parse JSON[%s][%s]" % (e.message, ret_body))
Client側
20
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from ymsft_util_client import XmppCtlClient
import sys
# クライアントインスタンス作成
ac = XmppCtlClient("http://localhost:8000/", "b7f6e30e44ec109012a3300ead6bd7f429e4cbe6")
# 基本形
print ac.post_message(
to_addr="sayamada@xxxxx.co.jp",
post_message=u"こんにちは"
)
# 送信元アドレス指定
print ac.post_message(
to_addr="sayamada@xxxxx.co.jp",
post_message=u"こんにちは",
sender_account="any_group@xxxxx.co.jp",
sender_password="any_group",
)
使い方
21
●
Pythonでかき捨てスクリプトがあるならDjango楽
●
HTTPヘッダも簡単につかえるので認証も楽
●
FormクラスつかえばValidationも簡単
●
クライアントはHTTPさえできれば何でもよい
Djangoで簡単に中央集権!

More Related Content

PDF
Goで書くNeoVimプラグイン - OpenAppLab Aizu LT feat. CyberAgent
PDF
Laravel5.1 Release
PDF
php開発で使うタスクランナー gulp
ODP
20101001 5分でわかるtrac pluginの作り方_slideshare
PDF
Laravel 5.1 LTSでサービスを作る
PDF
PHPデプロイツールの世界
PDF
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PDF
PostgreSQL実行計画入門@関西PostgreSQL勉強会
Goで書くNeoVimプラグイン - OpenAppLab Aizu LT feat. CyberAgent
Laravel5.1 Release
php開発で使うタスクランナー gulp
20101001 5分でわかるtrac pluginの作り方_slideshare
Laravel 5.1 LTSでサービスを作る
PHPデプロイツールの世界
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PostgreSQL実行計画入門@関西PostgreSQL勉強会

Viewers also liked (13)

PDF
[OSC2016沖縄]商用DBからPostgreSQLへの移行入門
PDF
PostgreSQLとPythonとSQL
PDF
bottle.pyをつかったチャットアプリ作成チュートリアル
PDF
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PDF
bottleで始めるWEBアプリの最初の一歩
PDF
PostgreSQL 9.6 新機能紹介
PDF
並列クエリを実行するPostgreSQLのアーキテクチャ
PDF
(JP) GPGPUがPostgreSQLを加速する
PDF
まずやっとくPostgreSQLチューニング
PDF
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PDF
PostgreSQLによるデータ分析ことはじめ
PDF
In-Database Analyticsの必要性と可能性
[OSC2016沖縄]商用DBからPostgreSQLへの移行入門
PostgreSQLとPythonとSQL
bottle.pyをつかったチャットアプリ作成チュートリアル
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
bottleで始めるWEBアプリの最初の一歩
PostgreSQL 9.6 新機能紹介
並列クエリを実行するPostgreSQLのアーキテクチャ
(JP) GPGPUがPostgreSQLを加速する
まずやっとくPostgreSQLチューニング
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLによるデータ分析ことはじめ
In-Database Analyticsの必要性と可能性
Ad

Similar to Djangoで業務改善したい (15)

PDF
Djangoのススメ
KEY
How to django at first
PPTX
DjangoでさくっとWeb アプリケーション開発をする話
ODP
Django 1.5 における効果的な MTV 設計 & ネイティブApp
PPTX
コボラーがPython始めてみた話
PDF
Pythonで始めるtoC向けWebサービス入門
PDF
Djangoのエントリポイントとアプリケーションの仕組み
PPTX
Django Rest Frameworkでお手軽にREST APIを作る
PDF
Djangoフレームワークの紹介
PPTX
Djangoのチュートリアル
ODP
Djangoアプリの実践的設計手法
PDF
PDF
Djangoフレームワークの紹介
PDF
Djangoによるスマホアプリバックエンドの実装
PDF
Webフレームワークパネル(Django) at PyConJP 2012
Djangoのススメ
How to django at first
DjangoでさくっとWeb アプリケーション開発をする話
Django 1.5 における効果的な MTV 設計 & ネイティブApp
コボラーがPython始めてみた話
Pythonで始めるtoC向けWebサービス入門
Djangoのエントリポイントとアプリケーションの仕組み
Django Rest Frameworkでお手軽にREST APIを作る
Djangoフレームワークの紹介
Djangoのチュートリアル
Djangoアプリの実践的設計手法
Djangoフレームワークの紹介
Djangoによるスマホアプリバックエンドの実装
Webフレームワークパネル(Django) at PyConJP 2012
Ad

More from Satoshi Yamada (9)

PDF
Pythonで業務改善をしたときにあった問題(ライト版)
PDF
pythonでemlファイルを扱う話
PDF
Requestsで始める5分前帰社
PDF
DBエンジニアに必要だったPythonのスキル
PDF
本気でPythonで宛名書きした話
PDF
10080分でPythonからIP Messeneger
PDF
15分で情シスに怒られる方法
PDF
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PDF
201505 PostgreSQLアンカンファレンス(PL/Pythonで作るWEBアプリ)
Pythonで業務改善をしたときにあった問題(ライト版)
pythonでemlファイルを扱う話
Requestsで始める5分前帰社
DBエンジニアに必要だったPythonのスキル
本気でPythonで宛名書きした話
10080分でPythonからIP Messeneger
15分で情シスに怒られる方法
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
201505 PostgreSQLアンカンファレンス(PL/Pythonで作るWEBアプリ)

Djangoで業務改善したい