diff --git a/api/views.py b/api/views.py index afe5246..4326f94 100644 --- a/api/views.py +++ b/api/views.py @@ -1,11 +1,12 @@ -from app.models import Tag, Tutorial from django.http import HttpResponse from django.shortcuts import render from rest_framework import status from rest_framework.decorators import api_view from rest_framework.pagination import PageNumberPagination from rest_framework.renderers import JSONRenderer -from taggie.parser import generate_tags + +from app.models import Tag, Tutorial +from app.views import handle_tutorial_post_request from .serializers import TagSerializer, TutorialPOST, TutorialSerializer @@ -39,29 +40,18 @@ def tutorials(request): elif request.method == 'POST': postserializer = TutorialPOST(data=request.data) if postserializer.is_valid(): - link_count = Tutorial.objects.filter( - link=request.data['link']).count() - if link_count == 0: - tags, title = generate_tags(request.data['link']) - if 'other' in tags: + link = request.data['link'] + category = request.data['category'] + result = handle_tutorial_post_request(link, category) + if result is not None: + if result: return JSONResponse( {"message ": "Not a Tutorial link"}, status=status.HTTP_406_NOT_ACCEPTABLE ) - else: - tutorial_object = Tutorial.objects.create( - title=title, - link=request.data['link'], - category=request.data['category'] - ) - for tag in tags: - obj, created = Tag.objects.get_or_create(name=tag) - - tag_obj_list = Tag.objects.filter(name__in=tags) - tutorial_object.tags.set(tag_obj_list) - return JSONResponse( - {"message ": "Created, Thanks"}, status=status.HTTP_201_CREATED - ) + return JSONResponse( + {"message ": "Created, Thanks"}, status=status.HTTP_201_CREATED + ) return JSONResponse( {"message ": "Created, Thanks"}, status=status.HTTP_201_CREATED ) diff --git a/app/views.py b/app/views.py index 485fa15..a4dacb2 100644 --- a/app/views.py +++ b/app/views.py @@ -4,6 +4,7 @@ from django.db.models import Q from django.shortcuts import render from django.views.generic import TemplateView + from taggie.parser import generate_tags from .models import Tag, Tutorial @@ -119,29 +120,40 @@ def get(self, request): def post(self, request): """POST a tutorial""" - link_count = Tutorial.objects.filter( - link=request.POST['tlink']).count() - if link_count == 0: - tags, title = generate_tags(request.POST['tlink']) + link = request.POST['tlink'] + category = request.POST['tcategory'] + result = handle_tutorial_post_request(link, category) + if result is not None: self.context['error'] = 'Not a Tutorial Link, Try Again' - if 'other' in tags: + if result: return render( request, 'contribute.html', self.context ) - else: - tutorial_object = Tutorial.objects.create( - title=title, - link=request.POST['tlink'], - category=request.POST['tcategory'] - ) - for tag in tags: - obj, created = Tag.objects.get_or_create(name=tag) - - tag_obj_list = Tag.objects.filter(name__in=tags) - tutorial_object.tags.set(tag_obj_list) - # thankyou.html shouldn't be accessible unless someone successfully posts - # a tutorial - return render(request, 'thankyou.html', {'title': 'Thanks!'}) + # thankyou.html shouldn't be accessible unless someone successfully posts + # a tutorial + return render(request, 'thankyou.html', {'title': 'Thanks!'}) return render(request, 'thankyou.html', {'title': 'Thanks!'}) + + +def handle_tutorial_post_request(link, category): + if Tutorial.objects.filter( + link=link + ).exists(): + tags, title = generate_tags(link) + if 'other' in tags: + return True + else: + tutorial_object = Tutorial.objects.create( + title=title, + link=link, + category=category + ) + tag_obj_list = [] + for tag in tags: + obj, created = Tag.objects.get_or_create(name=tag) + tag_obj_list.append(obj) + + tutorial_object.tags.set(tag_obj_list) + return False