Django练习:视图较小或视图较少?

时间:2012-11-13 09:09:47

标签: django

我正在使用django开发一个应用程序,我有一个视图,我使用2返回render_to_response,有两个不同的html文件,具体取决于用户的状态。

我想知道将我的观点分成两个不同的观点或者是否应该保持更大的观点是否更好。

这样做的优点和缺点是什么?

很抱歉,如果我的问题不明确。非常感谢您的建议。

1 个答案:

答案 0 :(得分:1)

这个问题没有正确或错误的答案,所以你的问题在stackoverflow上可能是不可接受的,而stackoverflow通常是针对特定技术解决方案的问题/问题。

那就是说,这是我对这个主题的看法 - 我个人希望保持我的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方法。

然而,在一天结束时,组织代码和封装代码是一个判断调用,当你以开发人员的身份进行时,你可以做出判断。