Resolve and call the view, then apply view, exception, and template_response middleware. This method is everything that happens inside the request/response middleware.
(self, request)
| 174 | return response |
| 175 | |
| 176 | def _get_response(self, request): |
| 177 | """ |
| 178 | Resolve and call the view, then apply view, exception, and |
| 179 | template_response middleware. This method is everything that happens |
| 180 | inside the request/response middleware. |
| 181 | """ |
| 182 | response = None |
| 183 | callback, callback_args, callback_kwargs = self.resolve_request(request) |
| 184 | |
| 185 | # Apply view middleware |
| 186 | for middleware_method in self._view_middleware: |
| 187 | response = middleware_method( |
| 188 | request, callback, callback_args, callback_kwargs |
| 189 | ) |
| 190 | if response: |
| 191 | break |
| 192 | |
| 193 | if response is None: |
| 194 | wrapped_callback = self.make_view_atomic(callback) |
| 195 | # If it is an asynchronous view, run it in a subthread. |
| 196 | if iscoroutinefunction(wrapped_callback): |
| 197 | wrapped_callback = async_to_sync(wrapped_callback) |
| 198 | try: |
| 199 | response = wrapped_callback(request, *callback_args, **callback_kwargs) |
| 200 | except Exception as e: |
| 201 | response = self.process_exception_by_middleware(e, request) |
| 202 | if response is None: |
| 203 | raise |
| 204 | |
| 205 | # Complain if the view returned None (a common error). |
| 206 | self.check_response(response, callback) |
| 207 | |
| 208 | # If the response supports deferred rendering, apply template |
| 209 | # response middleware and then render the response |
| 210 | if hasattr(response, "render") and callable(response.render): |
| 211 | for middleware_method in self._template_response_middleware: |
| 212 | response = middleware_method(request, response) |
| 213 | # Complain if the template response middleware returned None |
| 214 | # (a common error). |
| 215 | self.check_response( |
| 216 | response, |
| 217 | middleware_method, |
| 218 | name="%s.process_template_response" |
| 219 | % (middleware_method.__self__.__class__.__name__,), |
| 220 | ) |
| 221 | try: |
| 222 | response = response.render() |
| 223 | except Exception as e: |
| 224 | response = self.process_exception_by_middleware(e, request) |
| 225 | if response is None: |
| 226 | raise |
| 227 | |
| 228 | return response |
| 229 | |
| 230 | async def _get_response_async(self, request): |
| 231 | """ |
nothing calls this directly
no test coverage detected