Contenu connexe
Similaire à Djangoで業務改善したい (20)
Plus de Satoshi Yamada (9)
Djangoで業務改善したい
- 15. 15
├─IntraCtl -- イントラ操作を自動化
│ ├─lib
│ └─migrations
├─AuthCtl -- 認証処理
│ ├─lib
│ ├─migrations
│ └─templates
│ └─auth
├─static -- WEBサービスとしての静的ファイル
│ ├─css
│ ├─fonts
│ └─js
├─XmppCtl -- XmppのAPI提供
│ ├─lib
│ └─migrations
└─YmsftUtilServer -- Djangoのプロジェクト
- 16. 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. 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層で使う
- 19. 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. 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",
)
使い方