Quantcast
Channel: django - akiyoko blog
Viewing all articles
Browse latest Browse all 52

Django のビューから Django コマンドを実行する方法

$
0
0

この投稿は 「Calendar for Django | Advent Calendar 2022 - Qiita」 3日目の記事です。

小ネタです。


Django のビューから直接 Djangoコマンドを実行するには、django.core.management.call_command を使えば簡単です。*1


こんな感じで使います。

api/views.py

from django.core import management
from rest_framework.response import Response
from rest_framework.views import APIView


classCallCommandView(APIView):
    defpost(self, request, *args, **kwargs):
        # Djangoコマンドを実行
        management.call_command('loaddata', 'test_data', verbosity=0)
        # レスポンスオブジェクトを作成して返すreturn Response({'success': True})


これは Django REST Framework(通称 DRF)を使用したビューの実装例ですが、Django 単体でも同じように利用することが可能です。



config/urls.py

from django.urls import path

from api import views

urlpatterns = [
    path('call-command/', views.CallCommandView.as_view()),
]


実行結果





ちなみに、Django コマンドの「--no-input」オプションは call_command() に「interactive=False」を指定することで利用可能です。

management.call_command('flush', verbosity=0, interactive=False)


標準出力をファイルに書き込むこともできます。*2

withopen('/path/to/command_output', 'w') as f:
    management.call_command('dumpdata', stdout=f)


cron などで定期実行している Django コマンドを、API で呼び出すなどといった利用方法が考えられますね。

*1:ビューからでなくても、モデルでもどこでも実行可能です。

*2:https://docs.djangoproject.com/ja/3.2/ref/django-admin/#output-redirection


Viewing all articles
Browse latest Browse all 52

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>