相手を招待する
今の今まで知らなかった、Gmail+Calenderの機能。
相手がGmailを使ってる場合、招待状を送ることでカレンダーに予定を追加させることができるっぽい。
もちろん許可、不許可や中止など、最終的な操作は向こうができるから、強制的にカレンダーへ追加することはできないけどね。
ただ、Gmailからだと新規作成で予定の作成ができたが2014/07以降は使えなくなるっぽいので、Calenderで予定を作ってから招待という手順になる。
これ: https://support.google.com/calendar/answer/37161?hl=ja
Gmail から送った招待メールはただのText/HTMLだけなんだけど、スパムメール業者がOutlookで送ってきて、それ見たらどうもcalenderのフォーマットであればうまくいくっぽい。
そのスパム業者のメールを見たら、こんな感じだった。
Content-Type: text/calendar; method=REQUEST; name=meeting.ics Content-Transfer-Encoding: 7bit BEGIN:VCALENDAR PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN VERSION:2.0 METHOD:REQUEST X-MS-OLK-FORCEINSPECTOROPEN:TRUE BEGIN:VEVENT ATTENDEE;CN=A.YASUI+TEST@GMAIL.COM;RSVP=TRUE:mailto:A.YASUI+TEST@GMAIL.COM CLASS:PUBLIC CREATED:20140514T140009Z DTEND:20140514T200009Z DTSTAMP:20140514T202209Z DTSTART:20140514T203009Z LAST-MODIFIED:20140514T143050Z LOCATION:Test Nanodesu ORGANIZER;CN="Tesutonano":mailto:a.yasui@gmail.com PRIORITY:5 SEQUENCE:0 SUMMARY;LANGUAGE=ja-jp:Tesuto nano TRANSP:OPAQUE UID:{1e991223-9e1c-4aa9-b8c6-92d9b6e13dce} X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE X-MICROSOFT-CDO-IMPORTANCE:1 X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY X-MICROSOFT-DISALLOW-COUNTER:FALSE X-MS-OLK-ALLOWEXTERNCHECK:TRUE X-MS-OLK-AUTOSTARTCHECK:FALSE X-MS-OLK-CONFTYPE:0 X-MS-OLK-SENDER;CN="Tesuto Nano":mailto:a.yasui@gmail.com BEGIN:VALARM TRIGGER:-PT15M ACTION:DISPLAY DESCRIPTION:Reminder END:VALARM END:VEVENT END:VCALENDAR
とりあえず。
テンプレートでモデルのクエリーを出す
テンプレートタグ内で、よく関連する情報を引っ張ってきたい時がある。その時は、Modelにメソッドを付けて {{ hoge.method }} としてやればいい
__str__ と __unicode__ と Python3
いちおう、Django1.5から(だっけ?忘れた)はPython3対応をうたってるけど、__str__ と __unicode__ があってそれの対応方法
デコレ
from django.utils.encoding import python_2_unicode_compatible @python_2_unicode_compatible class Room (models.Model): def __str__ (self): return self # def __unicode__ (self): return self # これが有効になっているとエラーを出す
CakePHP の DebugToolbar みたいなのがほしい
django-debug-toolbar をいれればいい(Django1.6で動いた)
1. pip install django-debug-toolbar
2. インストールした先(virtualenv で py27 とかしている場合、「py27/lib/python2.7/site-packages/debug_toolbar」)にあるtemplates と static を適切なディレクトリにまるごとコピー
3. settings.py に色々追記
MIDDLEWARE_CLASSES = ( … 'debug_toolbar.middleware.DebugToolbarMiddleware', # 一番最後出ないとダメだけ、GZip 使ってる場合はそれより上に。 ) INTERNAL_IPS = ('127.0.0.1',) DEBUG_TOOLBAR_PANELS = ( 'debug_toolbar.panels.version.VersionDebugPanel', 'debug_toolbar.panels.timer.TimerDebugPanel', 'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel', 'debug_toolbar.panels.headers.HeaderDebugPanel', 'debug_toolbar.panels.request_vars.RequestVarsDebugPanel', 'debug_toolbar.panels.template.TemplateDebugPanel', 'debug_toolbar.panels.sql.SQLDebugPanel', 'debug_toolbar.panels.signals.SignalDebugPanel', 'debug_toolbar.panels.logger.LoggingPanel', ) DEBUG_TOOLBAR_CONFIG = { 'INTERCEPT_REDIRECTS': True, 'SHOW_TOOLBAR_CALLBACK': lambda (request): True, 'EXTRA_SIGNALS': [], 'HIDE_DJANGO_SQL': True, 'TAG': 'div', }
4. これでだいたい見れた
ログインしてないとアクセス出来ないようにしたい
デコれ
views.py
from django.contrib.auth.decorators import login_required @login_required(login_url='/accounts/login/') def user_index (request): ...
Cake の Session->flash みたいなのはないのか?
メモ書きを一気に。
view 側
{% if messages %} <ul class="messages"> {% for message in messages %} <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li> {% endfor %} </ul> {% endif %}
view.py 側
from django.contrib import messages MESSAGE_TAGS = { messages.INFO: '', 50: 'critical', } def action(request): messages.error(request, u'ルーム名を入力してください') return render_to_response("hogs.html", {}, context_instance=RequestContext(request))