1+ from django .contrib import messages
12from django .contrib .auth .mixins import LoginRequiredMixin
23from django .contrib .messages .views import SuccessMessageMixin
34from django .http import HttpResponseRedirect , Http404 , HttpResponseBadRequest
45from django .shortcuts import get_object_or_404
5- from django .urls import reverse_lazy
6+ from django .urls import reverse_lazy , reverse
67from django .utils import timezone
78from django .utils .translation import gettext_lazy as _
89from django .views .generic import DetailView , CreateView
@@ -26,24 +27,37 @@ class AddContentView(SuccessMessageMixin, LoginRequiredMixin, CreateView): # py
2627 def get_success_message (self , cleaned_data ):
2728 return _ (f"Content '{ cleaned_data ['type' ]} ' successfully added" )
2829
30+ def handle_error (self ):
31+ """
32+ create error message and return to course page
33+ """
34+ course_id = self .kwargs ['course_id' ]
35+ messages .error (self .request , _ ('An error occurred while processing the request' ))
36+ return HttpResponseRedirect (reverse ('frontend:course' , args = (course_id ,)))
37+
2938 def get_context_data (self , ** kwargs ):
3039 context = super ().get_context_data (** kwargs )
3140
3241 if "type" in self .kwargs :
3342 content_type = self .kwargs ['type' ]
3443 if content_type in CONTENT_TYPE_FORMS :
3544 context ['content_type_form' ] = CONTENT_TYPE_FORMS .get (content_type )
45+ else :
46+ return self .handle_error ()
47+ else :
48+ return self .handle_error ()
3649 return context
3750
3851 def post (self , request , * args , ** kwargs ):
3952 add_content_form = AddContentForm (request .POST )
40- content_type = self .kwargs ['type' ]
41- if content_type in CONTENT_TYPE_FORMS :
42- content_type_form = CONTENT_TYPE_FORMS .get (content_type )(request .POST , request .FILES )
53+ if "type" in self .kwargs :
54+ content_type = self .kwargs ['type' ]
55+ if content_type in CONTENT_TYPE_FORMS :
56+ content_type_form = CONTENT_TYPE_FORMS .get (content_type )(request .POST , request .FILES )
57+ else :
58+ return self .handle_error ()
4359 else :
44- return HttpResponseBadRequest ('Invalid Post Request' )
45- # use for HTTPResponseRedirect
46- course_id = self .kwargs ['course_id' ]
60+ return self .handle_error ()
4761
4862 if add_content_form .is_valid () and content_type_form .is_valid ():
4963 # save author etc.
@@ -58,6 +72,7 @@ def post(self, request, *args, **kwargs):
5872 content_type_data .content = content
5973 content_type_data .save ()
6074
75+ course_id = self .kwargs ['course_id' ]
6176 topic_id = self .kwargs ['topic_id' ]
6277 return HttpResponseRedirect (reverse_lazy ('frontend:content' , args = (course_id , topic_id , content .id ,)))
6378
0 commit comments