[BUG] Ninja 路由中忽略了 transaction.non_atomic_requests
Control: Django's decorator disables ATOMIC_REQUESTS on a regular view
@transaction.non_atomic_requests def django_view(request): return JsonResponse({"in_atomic_block": connection.in_atomic_block})
api = NinjaAPI()
Ninja: the same decorator has no effect on a ninja view
@api.get("/ninja-direct") @transaction.non_atomic_requests def direct_ninja_view(request): return {"in_atomic_block": connection.in_atomic_block}
decorated_api = NinjaAPI(urls_namespace="decorated-api")
Test the suggested workaround (not working)
try: @decorated_api.get("/ninja-decorate-view") @decorate_view(transaction.non_atomic_requests) def decorated_ninja_view(request): return {"in_atomic_block": connection.in_atomic_block} except AttributeError as exc: decorate_view_error = exc else: decorate_view_error = None
urlpatterns = [ path("django", django_view), path("", api.urls), ]
if name == "main": client = Client() django_result = client.get("/django").json() direct_ninja_result = client.get("/ninja-direct").json() direct_ninja_callback = resolve("/ninja-direct").func
内容来源: vitalik/django-ninja