From fc093c8879af478eec693cfa7a1f1f29c1f772d0 Mon Sep 17 00:00:00 2001 From: Lukas Winkler Date: Wed, 8 Jul 2020 22:01:43 +0200 Subject: [PATCH] allow adding references from webUI --- acros/forms.py | 24 +++++++++++++----- acros/templates/acros/addform.html | 8 ++++++ acros/templates/acros/addpaper.html | 14 +++++++++++ acros/templates/acros/addwebsite.html | 10 ++++++++ acros/templates/acros/addwiki.html | 10 ++++++++ acros/templates/acros/detail.html | 6 ++--- acros/urls.py | 3 +++ acros/utils/apis.py | 2 +- acros/views.py | 36 +++++++++++++++++++++++++-- 9 files changed, 101 insertions(+), 12 deletions(-) create mode 100644 acros/templates/acros/addform.html create mode 100644 acros/templates/acros/addpaper.html create mode 100644 acros/templates/acros/addwebsite.html create mode 100644 acros/templates/acros/addwiki.html diff --git a/acros/forms.py b/acros/forms.py index 050528e..b61cdd3 100644 --- a/acros/forms.py +++ b/acros/forms.py @@ -1,7 +1,7 @@ from django.core.exceptions import ValidationError from django.forms import ModelForm, TextInput, CharField -from acros.models import Acronym, Tag +from acros.models import Acronym, Tag, WikipediaLink, PaperReference, Weblink from acros.utils.tags import parse_tags, edit_string_for_tags @@ -60,10 +60,22 @@ class AddForm(ModelForm): fields = ['name', 'full_name', "description_md", "tags"] -class AddWikipediaForm(ModelForm): - tags = TagField() - +class WikipediaForm(ModelForm): class Meta: - model = Acronym + model = WikipediaLink - fields = ['name', 'full_name', "description_md", "tags"] + fields = ['title'] + + +class PaperForm(ModelForm): + class Meta: + model = PaperReference + + fields = ['bibcode'] + + +class WeblinkForm(ModelForm): + class Meta: + model = Weblink + + fields = ['url'] diff --git a/acros/templates/acros/addform.html b/acros/templates/acros/addform.html new file mode 100644 index 0000000..8233b01 --- /dev/null +++ b/acros/templates/acros/addform.html @@ -0,0 +1,8 @@ +{% load bootstrap4 %} +
+ {% csrf_token %} + {% bootstrap_form form %} + {% buttons %} + + {% endbuttons %} +
diff --git a/acros/templates/acros/addpaper.html b/acros/templates/acros/addpaper.html new file mode 100644 index 0000000..955721e --- /dev/null +++ b/acros/templates/acros/addpaper.html @@ -0,0 +1,14 @@ +{% extends 'base.html' %} + +{% block heading %} +

Add Paper Reference

+{% endblock %} + +{% block content %} +

+ Search for the paper on ADS + and then copy the bibcode (e.g. 2018A&A...616A...1G ) into this form: +

+ {% include "acros/addform.html" %} +{% endblock %} + diff --git a/acros/templates/acros/addwebsite.html b/acros/templates/acros/addwebsite.html new file mode 100644 index 0000000..85e811c --- /dev/null +++ b/acros/templates/acros/addwebsite.html @@ -0,0 +1,10 @@ +{% extends 'base.html' %} + +{% block heading %} +

Add Weblink

+{% endblock %} + +{% block content %} + {% include "acros/addform.html" %} +{% endblock %} + diff --git a/acros/templates/acros/addwiki.html b/acros/templates/acros/addwiki.html new file mode 100644 index 0000000..473255c --- /dev/null +++ b/acros/templates/acros/addwiki.html @@ -0,0 +1,10 @@ +{% extends 'base.html' %} + +{% block heading %} +

Add Wikipedia Link

+{% endblock %} + +{% block content %} + {% include "acros/addform.html" %} +{% endblock %} + diff --git a/acros/templates/acros/detail.html b/acros/templates/acros/detail.html index 5b7c9b9..c233014 100644 --- a/acros/templates/acros/detail.html +++ b/acros/templates/acros/detail.html @@ -26,9 +26,9 @@ Add Reference {% endblock %} diff --git a/acros/urls.py b/acros/urls.py index cd782fa..8f473e9 100644 --- a/acros/urls.py +++ b/acros/urls.py @@ -26,6 +26,9 @@ urlpatterns = [ path('acronym/add', views.AddView.as_view(), name="add"), path('acronym/', views.DetailView.as_view(), name='detail'), path('acronym//edit', views.EditView.as_view(), name='edit'), + path('acronym//add/wikipedia', views.AddWikipediaView.as_view(), name='add_wikipedia'), + path('acronym//add/paper', views.AddPaperView.as_view(), name='add_paper'), + path('acronym//add/weblink', views.AddWeblinkView.as_view(), name='add_weblink'), path('acronyms', views.OverView.as_view(), name='overview'), path('tags', views.TagListView.as_view(), name='tags'), path('tag', RedirectView.as_view(pattern_name="tags")), diff --git a/acros/utils/apis.py b/acros/utils/apis.py index 712d165..3597245 100644 --- a/acros/utils/apis.py +++ b/acros/utils/apis.py @@ -6,7 +6,7 @@ def fetch_wikipedia_summary(title: str): r = requests.get("https://en.wikipedia.org/api/rest_v1/page/summary/" + title) r.raise_for_status() data = r.json() - print(data) + # print(data) r2 = requests.get("https://en.wikipedia.org/api/rest_v1/page/media-list/" + title) r2.raise_for_status() diff --git a/acros/views.py b/acros/views.py index 335f2c1..5d8a2d5 100644 --- a/acros/views.py +++ b/acros/views.py @@ -3,11 +3,12 @@ from datetime import date from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.messages.views import SuccessMessageMixin from django.http import HttpResponse +from django.urls import reverse from django.views import generic from rest_framework import viewsets, filters -from acros.forms import EditForm, AddForm -from acros.models import Acronym, Tag, AcroOfTheDay +from acros.forms import EditForm, AddForm, WikipediaForm, PaperForm, WeblinkForm +from acros.models import Acronym, Tag, AcroOfTheDay, WikipediaLink, PaperReference, Weblink from acros.serializers import AcronymSerializer, AcronymListSerializer, TagSerializer from acros.utils.assets import get_css @@ -58,6 +59,37 @@ class AddView(LoginRequiredMixin, SuccessMessageMixin, generic.CreateView): success_message = 'Acronym "%(name)s" was created successfully' +class AddReferenceView(LoginRequiredMixin, SuccessMessageMixin, generic.CreateView): + def form_valid(self, form): + acro = Acronym.objects.get(slug=self.kwargs.get('slug')) + form.instance.acronym = acro + return super().form_valid(form) + + def get_success_url(self): + return reverse("detail", kwargs={"slug": self.kwargs.get('slug')}) + + +class AddWikipediaView(AddReferenceView): + template_name = "acros/addwiki.html" + form_class = WikipediaForm + model = WikipediaLink + success_message = 'Wikipedia Reference "%(title)s" was created successfully' + + +class AddPaperView(AddReferenceView): + template_name = "acros/addpaper.html" + form_class = PaperForm + model = PaperReference + success_message = 'Paper Reference "%(title)s" was created successfully' + + +class AddWeblinkView(AddReferenceView): + template_name = "acros/addwebsite.html" + form_class = WeblinkForm + model = Weblink + success_message = 'Weblink "%(url)s" was created successfully' + + class TagListView(generic.ListView): template_name = "acros/taglist.html" model = Tag