1

私はdjangoを使用してアプリを開発していますが、ユーザーのステータスに応じて、2つの異なるhtmlファイルを使用して2つのreturnrender_to_responseを使用するビューがあります。

ビューを2つの異なるビューに分割する方がよいのか、それともより大きなビューを維持する必要があるのか​​、疑問に思いました。

そうすることの長所と短所は何ですか?

私の質問が明確でない場合は申し訳ありません。アドバイスありがとうございます。

4

1 に答える 1

1

この質問に対する正しい答えも間違った答えもないので、あなたの質問はスタックオーバーフローでは受け入れられないかもしれません。これは通常、特定の技術的解決策に関する質問/問題を対象としています。

とは言うものの、このトピックに関する私の見解は次のとおりです。私は個人的に自分をview function小さく保ち、さらに処理が必要な場合は、それらをより小さな関数に分割するのが好きです。

例えば:-

@permission_required('organizations.organization_add_user')
def organization_add_user(request, org_slug):
    org = get_object_or_404(Organization, slug=org_slug)
    form = OrganizationAddUserForm(org=org)

    if request.method == 'POST':
        form = OrganizationAddUserForm(request.POST or None, request.FILES or None, org=org)
        if form.is_valid():
            cd = form.cleaned_data

            # Create the user object & send out email for activation
            user = create_user_from_manual(request, data=cd)

            # Add user to OrganizationUser
            org_user, created = OrganizationUser.objects.get_or_create(user=user,\
                                                                    organization=org)
            dept = org.departments.get(name=cd['department'])
            org_user.departments.add(dept)

            # Add user to the appropriate roles (OrganizationGroup) and groups (django groups)
            org_groups = OrganizationGroup.objects.filter(group__name__in=cd['roles'], \
                organization=org)
            for g in org_groups:
                user.groups.add(g.group)

            return HttpResponse(reverse('add_user_success'))

    template = 'organizations/add_user.html'
    template_vars = {'form': form}
    # override request with dictionary template_vars
    template_vars = FormMediaRequestContext(request=request, dict=template_vars)
    return render(request, template, template_vars)

FormMediaEquestContextは別のファイルからインポートするクラスであり、フォームに関連付けられたjavascriptファイルとcssファイルを処理するのに役立つ独自のロジックがあります(OrganizationAddUserForm)。

create_user_from_manualは、個別にカプセル化され、システムに新しいユーザーを作成し、その新しいユーザーに招待メールを送信することに関連するかなり複雑なロジックを処理する、さらに別の関数です。

そしてもちろん、ユーザーの追加フォームが正常に実行されたときに独自のビュー機能とテンプレートを使用して完全に異なるURLにリダイレクトするのではなく、ユーザーがこの「ユーザーの追加」ページに初めてアクセスする場合は、別のテンプレートを提供します。

ビュー関数を適度に小さく保つことで、特定の機能に関連するバグを簡単に追跡できます。

create_user_from_manualさらに、別のビュー関数で同じユーティリティ関数が必要になった場合に、メソッドなどのユーティリティ関数を「再利用」するための良い方法でもあります。

ただし、結局のところ、コードの整理とコードのカプセル化は、開発者としての進歩に伴って行われる判断の呼びかけです。

于 2012-11-13T09:48:50.803 に答える