From 7a435bcbc6feb783488c68579f739ac4f42bc569 Mon Sep 17 00:00:00 2001 From: Aarni Date: Wed, 20 Sep 2017 19:27:36 +0300 Subject: [PATCH] Simple Ohlhafv challenge machine --- webapp/forms.py | 11 ++++++++ webapp/tables.py | 8 ++++++ webapp/templates/ohlhafv.html | 21 +++++++++++++++ webapp/templates/ohlhafv_list.html | 20 ++++++++++++++ webapp/urls.py | 8 ++++++ webapp/views.py | 43 ++++++++++++++++++++++++++++++ 6 files changed, 111 insertions(+) create mode 100644 webapp/forms.py create mode 100644 webapp/tables.py create mode 100644 webapp/templates/ohlhafv.html create mode 100644 webapp/templates/ohlhafv_list.html diff --git a/webapp/forms.py b/webapp/forms.py new file mode 100644 index 0000000..0e0930f --- /dev/null +++ b/webapp/forms.py @@ -0,0 +1,11 @@ +from django import forms +from django.utils.translation import ugettext_lazy as _ + +from webapp.models import OhlhafvChallenge + + +class OhlhafvForm(forms.ModelForm): + + class Meta: + model = OhlhafvChallenge + fields = ['challenger', 'challenger_email', 'victim', 'victim_email', 'series', 'message'] \ No newline at end of file diff --git a/webapp/tables.py b/webapp/tables.py new file mode 100644 index 0000000..40e8742 --- /dev/null +++ b/webapp/tables.py @@ -0,0 +1,8 @@ +import django_tables2 as tables +from django.utils.translation import ugettext as _ +from webapp.models import OhlhafvChallenge + + +class OhlhafvTable(tables.Table): + class Meta: + model = OhlhafvChallenge \ No newline at end of file diff --git a/webapp/templates/ohlhafv.html b/webapp/templates/ohlhafv.html new file mode 100644 index 0000000..05decc5 --- /dev/null +++ b/webapp/templates/ohlhafv.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} + +{% load bootstrap3 %} +{% load i18n %} + +{% block content %} +
+

{% trans "Ohlhafv" %}

+ +
+
{% csrf_token %} + {% bootstrap_form form %} + {% buttons %} + + {% endbuttons %} +
+
+
+{% endblock content %} diff --git a/webapp/templates/ohlhafv_list.html b/webapp/templates/ohlhafv_list.html new file mode 100644 index 0000000..a21e7e5 --- /dev/null +++ b/webapp/templates/ohlhafv_list.html @@ -0,0 +1,20 @@ +{% extends "base.html" %} + +{% load static %} +{% load i18n %} +{% load django_tables2 %} + +{% block content %} +
+ +
+

{% trans "All challenges" %}

+
+ +
+ {% trans "Total challenges:" %} {{ challenge_count }} +
+ + {{ table|safe }} +
+{% endblock content %} diff --git a/webapp/urls.py b/webapp/urls.py index 2dd136d..87f2d50 100644 --- a/webapp/urls.py +++ b/webapp/urls.py @@ -5,6 +5,9 @@ from webapp.views import admin_index from webapp.views import login_view from webapp.views import logout_view from webapp.views import about_view +from webapp.views import ohlhafv_view +from webapp.views import ohlhafv_submit +from webapp.views import ohlhafv_list urlpatterns = [ # main @@ -17,4 +20,9 @@ urlpatterns = [ # git revision url(r'^about', about_view), + + #ohlhafv + url(r'^ohlhafv$', ohlhafv_view), + url(r'^ohlhafv/submit', ohlhafv_submit), + url(r'^ohlhafv/list', ohlhafv_list), ] diff --git a/webapp/views.py b/webapp/views.py index d8e0ac5..c001339 100644 --- a/webapp/views.py +++ b/webapp/views.py @@ -2,9 +2,13 @@ from django.shortcuts import render, redirect from django.contrib.auth import login, logout, authenticate from django.views.decorators.http import require_http_methods from django.views.decorators.csrf import ensure_csrf_cookie +from django.http import HttpResponse, HttpResponseRedirect from django.contrib.auth.decorators import permission_required from django.conf import settings import logging +from webapp.models import OhlhafvChallenge +from webapp.forms import OhlhafvForm +from webapp.tables import OhlhafvTable @require_http_methods(["GET"]) @@ -48,3 +52,42 @@ def logout_view(request, *args, **kwargs): @require_http_methods(["GET"]) def about_view(request, *args, **kwargs): return render(request, "about.html", {}) + + +@require_http_methods(["GET"]) +def ohlhafv_view(request, *args, **kwargs): + form = OhlhafvForm() + return render(request, 'ohlhafv.html', {'form': form}) + + +@ensure_csrf_cookie +@require_http_methods(["POST"]) +def ohlhafv_submit(request, *args, **kwargs): + form = OhlhafvForm(request.POST) + if form.is_valid(): + form.save() + #return HttpResponseRedirect('/list/') + else: + pass + #return render(request, 'error.html', {'error': form.errors}) + return HttpResponseRedirect('/ohlhafv/list/') + + +@ensure_csrf_cookie +@require_http_methods(["GET"]) +def ohlhafv_list(request, *args, **kwargs): + challenges = OhlhafvChallenge.objects.all() + + table = OhlhafvTable(challenges, + request=request, + exclude=['id', 'challenger_email', 'victim_email'], + attrs={'class': 'table table-bordered table-hover'}) + + table.paginate(page=request.GET.get('page', 1), per_page=25) + table_html = table.as_html(request) + + context = { + 'table': table_html, + 'challenge_count': len(challenges), + } + return render(request, 'ohlhafv_list.html', context)