Skip to content
This repository has been archived by the owner on Nov 10, 2017. It is now read-only.

Commit

Permalink
bug 1181140 - Create GetFormView base class
Browse files Browse the repository at this point in the history
GetFormView is derived from django.views.generic.FormView, but allows
quick redirects using a GET and query string parameters.
  • Loading branch information
jwhitlock committed Nov 3, 2015
1 parent d758973 commit 662e294
Showing 1 changed file with 21 additions and 17 deletions.
38 changes: 21 additions & 17 deletions mdn/views.py
Expand Up @@ -10,10 +10,9 @@
from django.db.models import Count
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
from django.utils.six.moves.urllib.parse import urlparse, urlunparse, quote
from django.views.generic import DetailView, ListView, TemplateView
from django.views.generic.base import TemplateResponseMixin, View
from django.views.generic import DetailView, FormView, ListView, TemplateView
from django.views.generic.detail import BaseDetailView
from django.views.generic.edit import CreateView, FormMixin, UpdateView
from django.views.generic.edit import CreateView, UpdateView
import unicodecsv as csv

from .models import FeaturePage, Issue, ISSUES, SEVERITIES, validate_mdn_url
Expand Down Expand Up @@ -167,6 +166,24 @@ def render_to_response(self, context):
return JsonResponse(obj.data)


class GetFormView(FormView):
"""A FormView that also submits with GET and URL parameters."""

def get(self, request, *args, **kwargs):
get_params = self.request.GET.dict()
if get_params:
return self.post(request, *args, **kwargs)
else:
return super(GetFormView, self).get(request, *args, **kwargs)

def get_form_kwargs(self):
kwargs = super(GetFormView, self).get_form_kwargs()
get_params = self.request.GET.dict()
if self.request.method == 'GET' and get_params:
kwargs.setdefault('data', {}).update(get_params)
return kwargs


class SearchForm(forms.Form):
url = forms.URLField(
label='MDN URL',
Expand All @@ -182,24 +199,11 @@ def clean_url(self):
return cleaned


class FeaturePageSearch(TemplateResponseMixin, View, FormMixin):
class FeaturePageSearch(GetFormView):
"""Search for a MDN URI via GET"""
form_class = SearchForm
template_name = "mdn/feature_page_form.html"

def get_form_kwargs(self):
kwargs = super(FeaturePageSearch, self).get_form_kwargs()
kwargs.setdefault('data', {}).update(self.request.GET.dict())
return kwargs

def get(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)

def get_context_data(self, **kwargs):
ctx = super(FeaturePageSearch, self).get_context_data(**kwargs)
ctx['action'] = "Search by URL"
Expand Down

0 comments on commit 662e294

Please sign in to comment.