Djangoでwebサービスを作ってみました。完成はしましたが、ふんわりやっていたところを再度調べました。
views.pyで使ったあれこれ
クラスビューで使ったもの
例:
views.py
class ThreadView(ModelFormMixin, generic.DetailView):
model = Group
form_class = CommentCreateForm
def form_valid(self, form):
group_pk = self.kwargs['pk']
comment = form.save(commit=False)
comment.create_user = self.request.user
comment.post = get_object_or_404(Group, pk=group_pk)
comment.save()
return redirect('<app名>:group_thread', pk=group_pk)
def post(self, request, *args, **kwargs):
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
self.object = self.get_object()
return self.form_invalid(form)
form.save(commit=False)
formに紐ついたModelオブジェクトのインスタンスを返す。DBに登録はしない
関数ビューで使ったもの
returnの後に続くページ遷移メソッド
renderとか使いましたが、使い分けまとめ
HttpResponse
文字列やイテレータを引き渡す(と、公式に書かれていますが使っていないのであまりイメージできていない。。)
render
renderメソッドは、基本的にrequest、template_name、contextという3つの引数を取る。
request:getかpostか
template_name:htmlファイル
context:DBに入っているデータの情報
公式ドキュメントの説明では、
『テンプレートをロードしてコンテキストに値を入れ、テンプレートをレンダリングした結果を HttpResponse オブジェクトで返す』
redirect
POSTで返って来たデータを破棄して違うviewに遷移させる