Package: django-http-exceptions
What isdjango-http-exceptions?It is raisable exceptions for your django views.What is it good for?It makes thisdefsome_function():raiseSomeErrordefview(request):try:response=some_function()exceptSomeError:response=HttpResponse(status=403)returnresponseinto thisfromdjango_http_exceptionsimportHTTPExceptionsdefsome_function():raiseHTTPExceptions.FORBIDDEN# HTTPExceptions.from_status(403)defview(request):returnsome_function()meaning that is saves you from boilerplate code.It also allows you to hook default views toall possible http response codes, meaning that you can use more than the 5-6 django provided error handlers.How to use it?Just two middlewares, lower the better, and you are done.MIDDLEWARE=[...,'django_http_exceptions.middleware.ExceptionHandlerMiddleware','django_http_exceptions.middleware.ThreadLocalRequestMiddleware',...]And that is it, you are ready to raise your http exceptions.What else?HTTPExceptionsBase class that provides all the exceptions to be raised.HTTPExceptions.from_status(status)In case you don't want to writeHTTPExceptions.REQUEST_HEADER_FIELDS_TOO_LARGEYou can just writeHTTPExceptions.from_status(431)HTTPExceptions.BASE_EXCEPTONThe base exception for all http exceptionHTTPExceptions.register_base_exception(exception)Given thatexceptionis a class that inherits fromHTTPExceptionyou can customize the exceptions.
Keep in mind thatHTTPExceptionis anExceptionsubclass itself.HTTPExceptions.BASE_EXCEPTION.with_response(response)This is the method for raising exceptions with a response. You can put any response in this method while raising your
error.Let's say you have a view namedindex, then this example would return whatindexfunction would return, but with
status code410HTTPExceptions.GONE.with_response(index(request))HTTPExceptions.BASE_EXCEPTION.with_content(content)This method allow to raise anHTTPExceptionwith a custom message (can be eitherstrorbytes).For instance,HTTPExceptions.NOT_FOUND.with_content("The user named 'username' could not be found")would return something equivalent toHttpResponse("The user named 'username' could not be found", status=404).HTTPExceptions.BASE_EXCEPTION.with_json(json_data)This method allow to raise anHTTPExceptionwith a custom json response,json_datacan be anything thatJsonResponseaccepts.HTTPExceptions.BASE_EXCEPTION.register_default_view(view)viewis a function that takes only one argument,requestwhen you register a default view to an error class withHTTPExceptions.NOT_FOUND.register_defaul_view(view)whenHTTPExceptions.GONEis raised it returns the view function,
but again, with404status code. If the error has been raised with.with_response, that is used instead.get_current_requestThis function gets you the current request anywhere in your django application, making it easier for your dynamic error
responses to be created, like in theHTTPExceptions.GONE.with_response(index(request))example.ExceptionHandlerMiddlewareJust there for to exception handling to work.ThreadLocalRequestMiddlewareJust there for toget_current_requestto work.errorify(error)Decorator that turns a view (both class and function) into an http error@errorify(HTTPExceptions.PAYMENT_REQUIRED)classSubscribe(TemplateView):template=SUBSCRIBE_TEMPLATEAvaliable ExceptionsHTTPExceptions.CONTINUE# HTTPExceptions.from_status(100)HTTPExceptions.SWITCHING_PROTOCOLS# HTTPExceptions.from_status(101)HTTPExceptions.PROCESSING# HTTPExceptions.from_status(102)HTTPExceptions.OK# HTTPExceptions.from_status(200)HTTPExceptions.CREATED# HTTPExceptions.from_status(201)HTTPExceptions.ACCEPTED# HTTPExceptions.from_status(202)HTTPExceptions.NON_AUTHORITATIVE_INFORMATION# HTTPExceptions.from_status(203)HTTPExceptions.NO_CONTENT# HTTPExceptions.from_status(204)HTTPExceptions.RESET_CONTENT# HTTPExceptions.from_status(205)HTTPExceptions.PARTIAL_CONTENT# HTTPExceptions.from_status(206)HTTPExceptions.MULTI_STATUS# HTTPExceptions.from_status(207)HTTPExceptions.ALREADY_REPORTED# HTTPExceptions.from_status(208)HTTPExceptions.IM_USED# HTTPExceptions.from_status(226)HTTPExceptions.MULTIPLE_CHOICES# HTTPExceptions.from_status(300)HTTPExceptions.MOVED_PERMANENTLY# HTTPExceptions.from_status(301)HTTPExceptions.FOUND# HTTPExceptions.from_status(302)HTTPExceptions.SEE_OTHER# HTTPExceptions.from_status(303)HTTPExceptions.NOT_MODIFIED# HTTPExceptions.from_status(304)HTTPExceptions.USE_PROXY# HTTPExceptions.from_status(305)HTTPExceptions.TEMPORARY_REDIRECT# HTTPExceptions.from_status(307)HTTPExceptions.PERMANENT_REDIRECT# HTTPExceptions.from_status(308)HTTPExceptions.BAD_REQUEST# HTTPExceptions.from_status(400)HTTPExceptions.UNAUTHORIZED# HTTPExceptions.from_status(401)HTTPExceptions.PAYMENT_REQUIRED# HTTPExceptions.from_status(402)HTTPExceptions.FORBIDDEN# HTTPExceptions.from_status(403)HTTPExceptions.NOT_FOUND# HTTPExceptions.from_status(404)HTTPExceptions.METHOD_NOT_ALLOWED# HTTPExceptions.from_status(405)HTTPExceptions.NOT_ACCEPTABLE# HTTPExceptions.from_status(406)HTTPExceptions.PROXY_AUTHENTICATION_REQUIRED# HTTPExceptions.from_status(407)HTTPExceptions.REQUEST_TIMEOUT# HTTPExceptions.from_status(408)HTTPExceptions.CONFLICT# HTTPExceptions.from_status(409)HTTPExceptions.GONE# HTTPExceptions.from_status(410)HTTPExceptions.LENGTH_REQUIRED# HTTPExceptions.from_status(411)HTTPExceptions.PRECONDITION_FAILED# HTTPExceptions.from_status(412)HTTPExceptions.REQUEST_ENTITY_TOO_LARGE# HTTPExceptions.from_status(413)HTTPExceptions.REQUEST_URI_TOO_LONG# HTTPExceptions.from_status(414)HTTPExceptions.UNSUPPORTED_MEDIA_TYPE# HTTPExceptions.from_status(415)HTTPExceptions.REQUESTED_RANGE_NOT_SATISFIABLE# HTTPExceptions.from_status(416)HTTPExceptions.EXPECTATION_FAILED# HTTPExceptions.from_status(417)HTTPExceptions.UNPROCESSABLE_ENTITY# HTTPExceptions.from_status(422)HTTPExceptions.LOCKED# HTTPExceptions.from_status(423)HTTPExceptions.FAILED_DEPENDENCY# HTTPExceptions.from_status(424)HTTPExceptions.UPGRADE_REQUIRED# HTTPExceptions.from_status(426)HTTPExceptions.PRECONDITION_REQUIRED# HTTPExceptions.from_status(428)HTTPExceptions.TOO_MANY_REQUESTS# HTTPExceptions.from_status(429)HTTPExceptions.REQUEST_HEADER_FIELDS_TOO_LARGE# HTTPExceptions.from_status(431)HTTPExceptions.INTERNAL_SERVER_ERROR# HTTPExceptions.from_status(500)HTTPExceptions.NOT_IMPLEMENTED# HTTPExceptions.from_status(501)HTTPExceptions.BAD_GATEWAY# HTTPExceptions.from_status(502)HTTPExceptions.SERVICE_UNAVAILABLE# HTTPExceptions.from_status(503)HTTPExceptions.GATEWAY_TIMEOUT# HTTPExceptions.from_status(504)HTTPExceptions.HTTP_VERSION_NOT_SUPPORTED# HTTPExceptions.from_status(505)HTTPExceptions.VARIANT_ALSO_NEGOTIATES# HTTPExceptions.from_status(506)HTTPExceptions.INSUFFICIENT_STORAGE# HTTPExceptions.from_status(507)HTTPExceptions.LOOP_DETECTED# HTTPExceptions.from_status(508)HTTPExceptions.NOT_EXTENDED# HTTPExceptions.from_status(510)HTTPExceptions.NETWORK_AUTHENTICATION_REQUIRED# HTTPExceptions.from_status(511)