On 01/09/2012 10:36 PM, jrief wrote:
Hi,
currently I am writing a Django applications built up from loosely
coupled plug-ins. Each of these plug-ins shall offer a class based
view to handle get and post requests. For get requests the context
shall be populated with plug-in specific data. For post requests, the
plug-in specific posted data shall be handled by the corresponding
view class.
This of course is not difficult to achieve. The view class of the
final app, which combines all these plugins, can overload the methods
get_context_data() and post() and dispatch the requests to functions
offered by these plug-ins. But I do not like this approach because it
does not separate concerns and the author of the final app has to
remember, how to dispatch these requests manually to the plug-ins.
Is there a way to know which plugin is needed?
My question is, if there is there a more elegant solution, say a
pattern, which does not require to duplicate the dispatching code for
the mixin classes?
Let me explain using some sample code:
class MainAppDetailView(SomeBaseDetailView, PluginAMixin, PluginBMixin):
model = MyModel
template_name = "my_detail.html"
def get_context_data(self, **kwargs):
context = super(FinalAppDetailView,
self).get_context_data(**kwargs)
PluginAMixin(self).update_context(context)
PluginBMixin(self).update_context(context)
return context
def post(self, *args, **kwargs):
post_request = self.request.POST
Instead of:
response = PluginAMixin(self).handle_post(post_request)
if issubclass(response, HTTPResponse):
return response
response = PluginBMixin(self).handle_post(post_request)
if issubclass(response, HTTPResponse):
return response
you could use:
for plugin in (PluginAMixin, PluginBMixin):
response = super(plugin, self).handle_post(post_request)
if issubclass(response, HTTPResponse):
return response
# handle post request for the main app
...
return response
For my point of view this example contains too much code duplication.
Is there a pattern, so that I only have to modify the class
declaration of my FinalAppDetailView or even better, only in my
settings.py?
Cheers, Jacob
--
Roland
--
You received this message because you are subscribed to the Google Groups "Django
users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en.