我正在使用 django 开发一个应用程序,我有一个视图,我使用 2 return render_to_response,有两个不同的 html 文件,具体取决于用户的状态。
我想知道将我的视图分成两个不同的视图是否会更好,或者我是否应该保持更大的视图。
这样做有什么好处和坏处?
对不起,如果我的问题不清楚。非常感谢您的建议。
我正在使用 django 开发一个应用程序,我有一个视图,我使用 2 return render_to_response,有两个不同的 html 文件,具体取决于用户的状态。
我想知道将我的视图分成两个不同的视图是否会更好,或者我是否应该保持更大的视图。
这样做有什么好处和坏处?
对不起,如果我的问题不清楚。非常感谢您的建议。
这个问题没有正确或错误的答案,因此您的问题在 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
是我从另一个文件中导入的一个类,它有自己的逻辑,可以帮助我处理与我的表单 ( OrganizationAddUserForm
) 关联的 javascript 和 css 文件。
create_user_from_manual
是另一个单独封装的函数,它处理与在我的系统中创建新用户和向该新用户发送邀请电子邮件相关的合理复杂的逻辑。
当然,如果这是用户第一次到达这个“添加用户”页面,我会提供一个不同的模板,而不是在添加用户表单成功执行时重定向到具有自己的视图功能和模板的完全不同的 url .
通过保持我们的视图函数相当小,我可以更轻松地跟踪与特定功能相关的错误。
此外,这也是“重用”我的实用程序函数的好方法,例如create_user_from_manual
在另一个视图函数中是否需要相同的实用程序函数的方法。
然而,归根结底,组织代码和封装代码是一个判断调用,你需要随着开发人员的进步而做出判断。