π‘οΈ Duck MiddlewaresΒΆ
Duck middlewares allow you to intercept, process, and modify HTTP requests and responses.
They provide a flexible mechanism for logging, validation, authentication, and more.
ποΈ Base Middleware ClassΒΆ
All custom middlewares in Duck inherit from BaseMiddleware:
from duck.http.middlewares import BaseMiddleware
from duck.http.request import HttpRequest
from duck.http.response import HttpBadRequestResponse, HttpResponse
class MyMiddleware(BaseMiddleware):
@classmethod
def process_request(cls, request: HttpRequest) -> int:
# Custom request processing logic
return cls.request_ok # or cls.request_bad
@classmethod
def process_response(cls, response: HttpResponse, request: HttpRequest) -> None:
# Modify response before sending
pass
β‘ Key AttributesΒΆ
Attribute |
Type |
Description |
|---|---|---|
|
|
Message for debugging errors in middleware (default: |
|
|
Indicates request is valid (default: |
|
|
Indicates request has issues (default: |
Each middleware subclass manages its own attributes independently.
Middleware class names must be unique to behave independently.
π§ Class MethodsΒΆ
process_request(request: HttpRequest) -> intΒΆ
Implement this method to inspect incoming requests.
Return
BaseMiddleware.request_okif valid orBaseMiddleware.request_badto indicate an error.
get_error_response(request: HttpRequest) -> HttpResponseΒΆ
Returns the default error response when
process_requestreturnsrequest_bad.
HttpBadRequestResponse("Sorry there is an error in Request, that's all we know!")
process_response(response: HttpResponse, request: HttpRequest) -> NoneΒΆ
Modify the outgoing response before it is sent to the client.
Optional to override depending on your middleware logic.
π‘ NotesΒΆ
You can return
request_badeven if the request has no errors to override the final response fromget_error_response.Use middlewares for authentication, logging, validation, rate-limiting, or any cross-cutting concerns.
Duck middlewares are class-based, so no instance creation is required.
β¨ Duckβs middleware system gives you powerful control over request/response flow while keeping the API simple and flexible.