EasyChat完成!・・・間近!!

漫画見たりしながら、苦労して作りました。(笑)
こんな感じです。

ほとんど、チュートリアルのとおりにできます。
参考:
MiCHiLU Labs.



まずは、URLの設定。
projectのurls.pyには、includeだけ書いておきます。

# easy chat
(r'^MyamyuApps/easy_chat/', include('myamyuapps.easy_chat.urls')),

そして、アプリのurls.pyに本物を書きます。

from django.conf.urls.defaults import *

urlpatterns = patterns('myamyuapps.easy_chat.views',
  (r'^$', 'index'),
)

URLの設定はこれだけです。

でもって、viewを作ります。
チャットなので、POSTなロジックも入るため、そこは違うスクリプトに書くことにします。
まずは、views.py

from django.shortcuts import render_to_response
from myamyuapps.easy_chat.models import Chat
from myamyuapps.easy_chat.src.PostChat import *

def index(request):
  speaker_name = post(request)
  chat_list = Chat.objects.all().order_by('-speak_time')[:30]
  return render_to_response(
    'easy_chat/index.html',
    {'chat_list': chat_list, 'speaker_name': speaker_name}
  )

order_byは、降順にしたい場合は-をつければいいらしいです。
DB操作については、リファレンスを参考に。
参考:
MiCHiLU Labs.


そして、postの処理。src/PostChat.pyにpostメソッドを書きました。

from myamyuapps.easy_chat.models import Chat
from datetime import datetime

def post(request):
  if 'name' not in request.POST:
    return ""
  if 'message' not in request.POST:
    return ""
  speaker = request.POST['name']
  message = request.POST['message']
  if speaker != "" and message != "":
    chat = Chat(speaker_name=speaker,
      message=message,
      speak_time=datetime.now())
    chat.save()
        
  return speaker

もう少しスマートに書けると思いますが、まぁこんな感じで。

でもって、テンプレートを書くと・・・

<form method="POST">
  {% ifequal speaker_name "" %}
    name:<input name="name" type="text"><br>
  {% else %}
    name:{% filter escape %}{{ speaker_name }}{% endfilter %}<br>
    <input type="hidden" name="name" value="{% filter escape %}{{ speaker_name }}{% endfilter %}">
  {% endifequal %}
  <input name="message" type="text" size="120">
  <input type="submit">
</form>
<hr>
{% if chat_list %}
  <ul>
    {% for chat in chat_list %}
      <li>{% filter escape %}{{ chat.speaker_name }}{% endfilter %} &gt; 
          {% filter escape %}{{ chat.message }}{% endfilter %} 
          ({{ chat.speak_time }})</li>
    {% endfor %}
  </ul>
{% else %}
  <p>no message</p>
{% endif %}

これだけで完成です!

テンプレートの書き方は、ドキュメントを参考にしてください。
参考:
MiCHiLU Labs.



テンプレートファイルの置き場所はsetting.pyにTEMPLATE_DIRSがあるのでそこに書いてください。
僕の場合は、~/djangotmpl/projectname にしました。