サイトアイコン 知的好奇心

DjangoでGET/POSTから値を取得する方法

DjangoでGET/POSTから値を取得する方法をご紹介します。

条件

GETから値を取得

以下のいずれかを使用します。

実装例

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から値を取得

以下のいずれかを使用します。

実装例

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()で取得した場合、番号を指定することで対象の値を取得することが出来ます。

参考

stackoverflow

https://stackoverflow.com/questions/3910165/handling-django-request-get-and-multiple-variables-for-the-same-parameter-name

Djangoのrequest.POSTからの値取得

モバイルバージョンを終了