DjangoでGET/POSTから値を取得する方法をご紹介します。
目次
条件
- Django 2.1.7
- Python 3.7.0
GETから値を取得
以下のいずれかを使用します。
- request.GET.get(‘param’, None)
- request.GET.getlist(‘param’, None)
実装例
views.py
import logging from django.contrib.auth.mixins import LoginRequiredMixin from django.views import generic from .models import Post logger = logging.getLogger('development') class IndexView(LoginRequiredMixin, generic.ListView): template_name = 'sample/index.html' model = Post def get(self, request, *args, **kwargs): if self.request.GET.get('title', None): logger.debug("request.GET.get() = " + self.request.GET.get('title', None)) if self.request.GET.getlist('title', None): logger.debug("request.GET.getlist() = " + self.request.GET.getlist('title', None)[0]) return generic.ListView.get(self, request, *args, **kwargs)
index.html
index.htmlの抜粋です。
<h1>フォーム</h1> <form method="get"> {% csrf_token %} <input type="textbox" value="1" name="title"> <input type="textbox" value="2" name="title"> <input type="textbox" value="3" name="title"> <input type="submit" id="button" name="button" value="送信"> </form>
実行結果
request.GET.get() = 3 request.GET.getlist() = 1
inputで同一name属性が3つあるため、request.GET.get()では最後の3だけが取得されます。
request.GET.getlist()で取得した場合、番号を指定することで対象の値を取得することが出来ます。
POSTから値を取得
以下のいずれかを使用します。
- request.POST.get(‘param’, None)
- request.POST.getlist(‘param’, None)
実装例
views.py
import logging from django.contrib.auth.mixins import LoginRequiredMixin from django.views import generic from .models import Post logger = logging.getLogger('development') class IndexView(LoginRequiredMixin, generic.ListView): template_name = 'sample/index.html' model = Post def post(self, request, *args, **kwargs): if self.request.POST.get('title', None): logger.debug("self.request.POST.get() = " + self.request.POST.get('title', None)) if self.request.POST.getlist('title', None): logger.debug("self.request.POST.getlist() = " + self.request.POST.getlist('title', None)[0]) return self.get(request, *args, **kwargs)
index.html
index.htmlの抜粋です。
<h1>フォーム</h1> <form method="post"> {% csrf_token %} <input type="textbox" value="1" name="title"> <input type="textbox" value="2" name="title"> <input type="textbox" value="3" name="title"> <input type="submit" id="button" name="button" value="送信"> </form>
実行結果
request.POST.get() = 3 request.POST.getlist() = 1
inputで同一name属性が3つあるため、request.POST.get()では最後の3だけが取得されます。
request.POST.getlist()で取得した場合、番号を指定することで対象の値を取得することが出来ます。