David Larlet avatar David Larlet committed 2e588a8

first thoughts

Comments (0)

Files changed (1)

-== Welcome ==
-
-Welcome to your wiki! This is the default page we've installed for your convenience. Go ahead and edit it.
-
-=== Wiki features ===
-
-This wiki uses the [[http://www.wikicreole.org/|Creole]] syntax, and is fully compatible with the 1.0 specification.
-
-The wiki itself is actually a hg repository, which means you can clone it, edit it locally/offline, add images or any other file type, and push it back to us. It will be live immediately.
-
-Go ahead and try:
-
-{{{
-$ hg clone http://bitbucket.org/david/djangorators/wiki/
-}}}
-
-Wiki pages are normal files, with the .wiki extension. You can edit them locally, as well as creating new ones.
-
-=== Syntax highlighting ===
-
-You can also highlight snippets of text, we use the excellent [[http://www.pygments.org/|Pygments]] library.
-
-Here's an example of some Python code:
-
-{{{
-#!python
-
-def wiki_rocks(text):
-	formatter = lambda t: "funky"+t
-	return formatter(text)
-}}}
-
-You can check out the source of this page to see how that's done, and make sure to bookmark [[http://pygments.org/docs/lexers/|the vast library of Pygment lexers]], we accept the 'short name' or the 'mimetype' of anything in there.
-
-Have fun!
+== Issue ==
+
+Most of the time your Django views look like this:
+
+{{{
+def my_view(request, args):
+    # deal with args
+    # deal with permissions
+    # do some useful stuff
+    # deal with rendering
+    return an http response
+}}}
+
+I think it's a bit silly to continuously copy/paste boring parts and that's exactly the place where decorators can be powerful.
+
+== Solution ==
+
+Imagine decorators like that:
+
+{{{
+@as_html('projects/project.html')
+@owner_required
+@from_object(Project)
+def my_view(request, instance):
+    # do some useful stuff
+    return a context dict
+}}}
+
+with:
+
+* from_object which deals with arguments and return an instance
+* owner_required which verifies if the request.user is the owner of the retrieved object
+* as_html which renders the context dict returned as an http response
+
+You can of course set a lot of as_* decorators (as_json, as_rdfxml and so on) applied in urls in order to use the same view.
+
+I'd love to know your thoughts about this approach even before I write the first line of code ;)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.