セッションをURLに付加
セッションIDをURLの後ろに付加させるカスタムタグを試しに作ってみた.
Cookieが無効な携帯は自動でセッションIDを付加させて欲しいなぁということでurlタグならぬーmobile_urlタグを作成. 今回は,前提として「django.core.context_processors.request」を有効へ.
# settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
)
また,MIDDLEWARE_CLASSに携帯用のUserAgentMobileMiddlewareを追記.これは 「 ウノウラボ Unoh Labs: Pythonで携帯の機種判別をする (perezvon さん)」を利用しました!! いつも参考にさせていただいてます☆ありがとうございます☆
さて,ここからmobile_urlタグの作成.内容は大したことなくおおもとのurlとURLNodeをそのまま利用しただけぇ.
# project/common/templatetags/custom_tags.py
from django.conf import settings
from django.template import Library, Node
from django.template.defaulttags import URLNode
from django.utils.encoding import iri_to_uri
from uamobile.nonmobile import NonMobileUserAgent
register = Library()
class MobileURLNode(URLNode):
def render(self, context):
url = super(MobileURLNode, self).render(context)
device = context['request'].device
# 携帯以外のアクセス処理
if isinstance(device, NonMobileUserAgent):
return url
# cookieが利用可能時処理
if device.supports_cookie():
return url
# session_idの付加
return url + iri_to_uri(
'?%s=%s' % (
settings.SESSION_COOKIE_NAME,
context['request'].session.session_key
)
)
def mobile_url(parser, token):
bits = token.contents.split(' ', 2)
if len(bits) < 2:
raise TemplateSyntaxError, "'%s' takes at least one argument (path to a view)" % bits[0]
args = []
kwargs = {}
if len(bits) > 2:
for arg in bits[2].split(','):
if '=' in arg:
k, v = arg.split('=', 1)
k = k.strip()
kwargs[k] = parser.compile_filter(v)
else:
args.append(parser.compile_filter(arg))
return MobileURLNode(bits[1], args, kwargs)
url = register.tag(mobile_url)
てな感じ,mobile_urlなんてurlをそのままコピー.ほんでもってーMobileURLNodeもURLNodeを継承してーそのまま利用. 結局,URLNodeでrender()されたURLのケツにセッションを付加させただけ. このとき,contextからデバイス情報とセッション情報を抜き取りたかったので最初に2つの作業をやったわけです.
これで,あとはテンプレートにて {% url %} を使うのと同じように {% mobile_url %} として使えば付加してくれるんじゃないかなぁ(笑)
ん~セッションIDを付加させるのを単純に ?session_key=session_value なんてしているので問題が多そう(苦笑).ここらはもう1ヒネリとか必要になりそうです. ちょいと適当なままBLOGに載せちゃった感がありますね.まぁ僕らしい僕らしい!!突っ込みがあれば是非宜しくお願いいたします!!
Comments
[url=http://www.netvibes.com/buy-generic-viagra-online][IMG]http://img49.imageshack.us/img49/9483/discountgenericonlined.jpg[/IMG]
][/url]
*THE LOWEST PRICE GUARANTEED
*Fully confidential
*No Prior Prescription Required
*Free Consultation
*Fast And Discreet Shipping Worldwide
*24/7 Customer Support
*And Much More
[url=http://www.netvibes.com/buy-generic-viagra-online][b]BUY PILLS NOW[/b][/url]
--------------------------------------------------------------
loving a man with erectile dysfunction
canadian viagra
erectile dysfunction diabetes journal
penis enlargement that solves erectile dysfunction
erectile dysfunction bent penis
sudden erectile dysfunction
xanax erectile dysfunction
vacumn pumps for erectile dysfunction
pornography and erectile dysfunction
nasal sprays and erectile dysfunction