2016-05-25 13 views
0

ウェブアプリケーションでのランタイムの最小化に関して、views.pyでインポートを保存するには理想的な場所ですDjangoのviews.pyでのインポートはどこですか?

外部モジュールでいくつかのフォームエントリを検証して処理したいとします。私の現在のコード:

from django.shortcuts import render 

from .forms import * 

import re 
import module1 
import module2 

def index(request): 
    form = MyForm() 
    if request.method == 'POST': 
     form = MyForm(request.POST) 

     if form.is_valid(): 
      # 
      #Process my stuff here using re, module1, module2 
      # 

return render(request, 'index.html', context) 

しかし、良いものを、それは条件if form.is_valid():が失敗した場合に、手前に、モジュールの再、モジュール1、モジュール2をインポートしてしているのですか?または条件if request.method == 'POST':が失敗しますか?それはフォームが決して提出されなかったときです。

これらの条件が満たされた後でこれらのモジュールをインポートすると、実際に必要なときにこれらのモジュールをインポートすると、これらの条件が失敗したときに実行時のオーバーヘッドが少なくなります。不要な輸入を避けることができますか?私の考えの

擬コード:

if form.is_valid(): 
    import re 
    #Perform some regex matches and stuff 
    if (above re matches succeed): 
     import module1 
     #Process my stuff here using module1 here 
     #and so on importing modules only when they are required 

これらのいずれかが推奨されており、ウェブサイト上で最高の性能を持っているでしょうか?

答えて

4

これを行わないでください。

このようなコードの途中でインポートする理由はありません。輸入は一度だけ行われます。あなたのコードがis_validパスをたどることがほぼ確実なので、そのインポートが必要になります。そのときまでインポートを保留するメリットはありません。

実際には、それは可能性がありますless performant;プロセスの開始時にすべてのインポートが行われるのではなく、誰かの要求の途中でそれをやっています。

いずれにせよ、違いは無視できるものです。読みやすくするために、所属する場所にインポートを配置してください。

+0

ありがとう、私はここでは内部の動作の任意のアイデアはありませんが、ユーザーがボタンをフォーム上でクリックすると、再度インポートが実行されることはありませんか? views.pyはもう一度呼び出されませんでしたか? – MohitC

+1

はいビュー*関数*が再度呼び出されます。しかし、それは輸入が再び行われることを引き起こさないだろう。それらはファイルに対してグローバルです。たとえそうであったとしても、Pythonは既にインポートされているときにモジュールを再インポートしません。 –

+0

ありがとうございます。 – MohitC

-1

ファイルの先頭にあるインポートモジュールは完全に問題なく、それはrecommended wayです。

インポートはすべてのリクエスト(PHPなど)ではなく、1つしか実行していないため、ランタイムオーバーヘッドが発生しません。

関連する問題