61.DjangoBasicAppsのCommentsを読んでみる
urls.pyには目新しいものがなかったのでスルーします。
urlを使ってbooksと同じように作成されていたのでスルーします。
1つだけわかったことは、view
の引数にはviews.py内のメソッドを入れるということ。
views.pyを確認する
コメント時の日付をバリデーションする方法を見つけました。
get_object_or_404
というショートカットが用意されていることにも気が付きました。
このショートカットは便利そうですね。request.userは認証していない場合にNoneになるはずですから、404になる。
djangorestframeworkを使う場合は、serializerを使ったり、IsAuthenticatedを使うことで対応ができると思います。
認証に関しても
DELTA = datetime.datetime.now() - datetime.timedelta( minutes=getattr(settings, 'COMMENT_ALTERATION_TIME_LIMIT', 15) ) def comment_edit(request, object_id, template_name='comments/edit.html'): comment = get_object_or_404(Comment, pk=object_id, user=request.user) if DELTA > comment.submit_date: return comment_error(request)
フォームを使ったバリデーションです。
if request.method == 'POST': form = CommentForm(request.POST, instance=comment) if form.is_valid(): form.save() return redirect(request, comment.content_object)
CommentFormは↓のようになっています
class CommentForm(ModelForm): class Meta: model = Comment exclude = ('content_type', 'object_pk', 'site', 'user', 'is_public', 'user_name', 'user_email', 'user_url', 'submit_date', 'ip_address', 'is_removed',)
個人的には、formは最終的に見た目をカスタマイズすることになるので、Formからタグは作成しないようにしています。
バリデーション目的のみ使うのが良いと思います。
バリデーションのみ行う場合、↓cerberusというライブラリがあるので参考にしてみてください。
http://docs.python-cerberus.org/en/stable/
load i18nという翻訳tag
template内に↓のような記述がありました。
{% load i18n %}
このタグを使うと、翻訳タグを使うことができます。
{% trans "Text" %}
実際に使う際は↓のドキュメントを参考にするとよい