Django community: Community blog posts RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
An Interview with Jacob Kaplan-Moss - Creator of Django
Jacob Kaplan-Moss is the co-creator of Django along with Adrian Holovaty, as well as the author of the Django Book. He has been involved with Django since before it was called Django. He is currently employed at Whiskey Media where his job is hacking at Django. He blogs on Jacobian.org. He graciously agreed to be interviewed at the 42topics blog. Shabda: Would you tell a little about yourself? How did you get started with Django? What other software/applications have you worked with. (Both OSS and otherwise)? Jacob: So a bit about me: I grew up in Silicon Valley, so like many other geeks I got started with computers really early; I was programming professionally before I graduated high school. I didn't start out doing web development; in college I worked on video surveillance systems for airports, harbors, marinas, and highways. That's where I found Python: I rewrote a Java-based camera controller in Python and haven't looked back since. I started doing web development pretty seriously when I moved to New York and took a job for a design firm there. The job was pretty terrible, and the technologies were worse: the good sites were PHP, and there was a bunch … -
An Interview with Adrian Holovaty - Creator of Django
Adrian Holovaty is the co-creator of Django, author of the Django book and is currently the BDFL of Django along with Jacob Kaplan-Moss. He studied journalism at University of Missouri–Columbia and has worked with many news sites including Lawrence Journal World and Washington Post. He currently works at EveryBlock, a startup he founded. Shabda: Would you tell a little about yourself? You majored in Journalism, how did you move to Programming? Adrian: Sure! I have a dual background in journalism and computer science. I intended to get a degree in journalism and a minor in computer science, but things got a little off track. I heard from a professional colleague that a certain Web site would probably hire me if I graduated a semester early, so I hurriedly dropped my CS minor and got special permission to graduate early -- but once the time came to ask for that job, the company was in the middle of a hiring freeze and didn't have a position for me. So, in hindsight, I should've stuck with the minor, but things ended up working out OK. Because journalism and computer science don't normally go together, I've had some success in this silly little … -
Develop Twitter API application in django and deploy on Google App Engine
Twitter's robust REST API enables building of good applications that leverage its increasingly large and real-time data. Google's cloud system App Engine not only provides a scalable platform for deploying applications, but also proves to be economically viable because of its pay per resource usage model and a large free quota. Little wonder then, there are increasingly large number of twitter apps being deployed on App Engine. In this post, I am going to examine how to create a simple application based on twitter's REST API and deploy it on Google App Engine. A deployed version can be found on Twitter-Follow. The specification is simple. It finds if a twitter user is following another twitter user, given their user names. The application is developed using django and deployed on Appengine using the app engine patch project. The code is open sourced with GPL v3 and can be checked out from Google Code. Lets get started building this application. Create an application Create a new application from App Engine Dashboard by registering an unique appspot.com sub-domain. This will be your application's unique identifier. You may have to register first. Install App Engine SDK Download and install the App Engine SDK. There … -
Better Python package management using source and version control systems
Thanks to awesome django community, there is plenty of open source django code around. These packages get updated quite often and if you use it often like we do, you'd have possibly realized the need to manage these packages better. Thankfully, all python ever needs is the source, and all you need to do is to place the source in the python path. Most projects use Distributed Version Control Systems like Mercurial and Git, and they come locally with the entire history of the source which provides a lot of control to use any version of the code. For code that we use often, like django packages, using the source from a version control system seems to be the best way to manage. In order to install django-registration, a popular django app by James Bennett, you need to: Clone the repository: $ hg clone https://becomingguru@bitbucket.org/ubernostrum/django-registration/ django_registration Create a symbolic link in the python path: $ sudo ln -fs ~/django_registration/registration /usr/lib/python2.6/dist-packages/django_registration Thats it. django_registration is now on the python path, courtesy of symbollic link, that links the django-registration source to python path, in this case the dist-packages/ folder; thus it will be possible to import this app within the python environment. … -
Django Request Response processing
Have you wondered the steps a users request goes through before being responded to by Django? The answer lies in reading django.core.handlers.base and django.core.handlers.wsgi. Here is a diagram explaining what happens. (Click to enlarge.) The steps are. (With Apache/Mod_wsgi, similar steps for other setup.) User's request comes to Apache etc. Apache sends request to django.core.handlers.wsgi via mod_wsgi. A list of request and response middleware callables is created. Request middleware is applied. If it sends a response, it is returned to the user. urlresolvers.resolve finds the view funcion to use. View middleware is applied. If response comes, it is sent back to the user. View function is called. It talks to models to do business logic, and renders the templates. The response middleware is applied, and response is sent back to the users. This misses a lot of important steps (Exception middleware, request_context populating, ...) but is a basic high level overview. Resources django/core/handlers/base.py django/core/handlers/wsgi.py .dia and other files for the image Do you twitter? Do you Github? Find us there. -
Remote debugging - debugging pesky server only bugs
Here is a quick tip. (Obvious if you work with Django for any length of time, but I have seen a few people who are not aware) You can put debug trace import pdb; pdb.set_trace() in your code, and put it on the server. When you access this view from your local browser, the debug is still hit and you have a debug shell on your server where you can step through. (Obviously this works only if you ran the code via manage.py runserver. But manage.py runserver start the server to listen only on local connections. If you want to access remotely you need to run as, python manage.py runserver 0.0.0.0:8000 Edit: As SmileyChris commented, a faster way is, python manage.py runserver 0:8000 The 0.0.0.0 implies that remote connections are possible. For me, this has been a lifesaver against those pesky bugs which show themselves only on the server, but not on the local machine. -
Django design patterns
This is announcement about our new work, Django design patterns, a ebook about, well, Django design patterns. (Well imagine that!). Here is the readme copied from there. [Edit] Syntax highlighting and indentation preservation were totally brroken. Fixed now. Django design patterns is a book about commonly occuring patterns in Django. Not patterns in Gof sense, but patterns in the sense, we work this way, and it works for us. For us it is a ~pattern of work~ sense. At this point this is just a lot of brain dump from us. The latest sources are always available from http://github.com/uswaretech/django-design-patterns/tree/master and latest html from http://djangodesignpatterns.uswaretech.net/ Please leave errata, feedback, critique as comments here. This is still very much a work in progress, released in the spirit of release early, release often. Click here to get it, or fork it on Github -
Aren't django signals a little like comefrom?
In computer programming, COMEFROM (or COME FROM) is an obscure control flowstructure used in some programming languages, primarily as a joke. I never liked using signals. Recently I was asked that, and has no answer, but a little thinking led me to this question. Aren't signals a little like COMEFROM. If yes, aren't they as bad as COMEFROM? If you do not know what a COMEFROM is, [wikipedia to the rescue](http://en.wikipedia.org/wiki/COMEFROM) Some hypothetical code using COMEFROM, again from wikipedia, from goto import comefrom, label comefrom .repeat name = raw_input('what is your name? ') if name: print "Hello",name label .repeat print "Goodbye!" And Some actual Django code using signals class Post(models.Model): name = models.CharField(...) ... num_comments = models.PositiveIntegerField(default = 0) class Comment(models.Model): ... post = models.ForeignKey(Post) def handle_num_comments(sender, **kwargs): instance = kwargs['instance'] instance.post.num_comments+=1 instance.post.save() from django.db.signals import post_save post_save.connect(handle_num_comments, sender=Comment) And the same code using COMEFROM class Post(models.Model): name = models.CharField(...) ... num_comments = models.PositiveIntegerField(default = 0) class Comment(models.Model): ... post = models.ForeignKey(Post) def save(self, *args, **kwargs): super(Comment, self).save(*args, **kwargs) instance = self LABEL .post_save def handle_num_comments(sender, **kwargs): instance = kwargs['instance'] COMEFROM .post_save instance.post.num_comments+=1 instance.post.save() So isn't the signals code a little like COMEFROM, and why is it superior to COMEFROM? … -
Django aggregation tutorial
One of the new and most awaited features with Django 1.1 was aggregation. As usual, Django comes with a very comprehensive documentation for this. Here, I have tried to put this in how-to form. Jump to howtos or Get source on Github. Essentially, aggregations are nothing but a way to perform an operation on group of rows. In databases, they are represented by operators as sum, avg etc. To do these operations Django added two new methods to querysets. aggregate annotate When you are have a queryset you can do two operations on it, Operate over the rowset to get a single value from it. (Such as sum of all salaries in the rowset) Operate over the rowset to get a value for each row in the rowset via some related table. The thing to notice is that option 1, will create one row from rowset, while option 2 will not change the number of rows in the rowset. If you are into analogies, you can think that option 1 is like a reduce and option 2 is like a map. In sql terms, aggregate is a operation(SUM, AVG, MIN, MAX), without a group by, while annotate is a operation … -
A response to Dropping Django
Brandon Bloom yesterday wrote an interesting post titled dropping Django. Despite a lot of hand waving(We needed a pragmatic template language to replace Django's idealistic one.), it raises some valid questions, so here is a solution to some of them. No support for hierarchical url creation. The simplest representation of nested urls I can think of is a nested tuple. Lets represent, the urls for a simple app by, >>> tree_urls = ('', 'list', ... ('edit/', 'edit', ('auto/', 'edit_auto')), ... ('^add/', 'add'), ... ('delete/', 'delete', ('hard/', 'delete_hard')) ... ) Guess what, urls.py is just a python module which excepts a variable names urlpatterns. Which means it is very easy to write a function which converts this nested structure to flat, structure. Here is a quick attempt at that, def merge(url): full_url=[] for i, el in enumerate(url): if i%2==0: full_url.append(el) full_url = ''.join(full_url) return full_url def combineflatten(seq): items= tuple(item for item in seq if not isinstance(item, tuple)) yield items for item in seq: if isinstance(item, tuple): for yielded in combineflatten(item): yield items+yielded def generate_flat_urls(tree_urls): """ >>> tree_urls = ('', 'list', ... ('edit/', 'edit', ('auto/', 'edit_auto')), ... ('^add/', 'add'), ... ('delete/', 'delete', ('delete/', 'delete_hard')) ... ) >>> generate_flat_urls(tree_urls) [('^$', 'list'), ('^edit/$', 'edit'), … -
Django-SocialAuth - Login via twitter, facebook, openid, yahoo, google using a single app.
TL;DR version: Here is an app to allow logging in via twitter, facebook, openid, yahoo, google, which should work transparently with Django authentication system. (@login_required, User and other infrastructure work as expected.) Demo and Code.Longer version follow: We are releasing our new app. Django-Socialauth. This app makes it awfully easy, to allow users to login your site using Yahoo/Google/Twitter/Facebook/Openid. A demo is available here. This is released under an Attribution Assurance License. A copy of the same is provided included with the code. After installing this app, you can use @login_required on any view and users identified via any means can access protected content. We provide services to integrate and implement this, for a low price of USD 1600. Please contact us at licenses@uswaretech.com to discuss your exact needs. The README is copied here for convenience. What it does. Allow logging in via various providers. Logging In This is a application to enable authentication via various third party sites. In particular it allows logging in via Twitter Gmail Facebook Yahoo(Essentially openid) OpenId Libs you need to install python-openid (easy_install) python-yadis (easy_install) python-oauth(easy_install) The API Keys are available from http://www.facebook.com/developers/createapp.php https://developer.yahoo.com/dashboard/createKey.html https://www.google.com/accounts/ManageDomains http://twitter.com/oauth_clients How it works. Openid: Users need to provide … -
Django gotchas
This is announcement about our new work, Django Gotchas, a teeny tiny ebook about commonly occurring gotchas with Django. Here is the readme copied from the project. Django-gotchas is a collections of gotchas which happen commonly when you are working with Django. They are some errors which I have made commonly or seen others do, these are not the errors which happen because they are hard to reason about, these are those errors which hapen when you close your eyes for a moment when coding. This is still very much a work in progress, released in the spirit of release early, release often. Click here to get it, or fork it on Bitbucket In Other news We have slightly updated the Django design patterns, though not the public website. cyrildoussin has done a lot of changes to Socialauth and made it much better. You can get it here . Thank! We will be merging this soon. -
Writing your own template loaders
Django has three builtin template loaders which are used to get the templates for rendering. TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.load_template_source', 'django.template.loaders.app_directories.load_template_source', # 'django.template.loaders.eggs.load_template_source', ) Writing your template loader is a awfuly easy. It is a callable which Returns a tuple of (openfile, filename) if it can find the template. Raise TemplateDoesNotExist if the templates cannot be found. The simplest template loader can be from django.template import TemplateDoesNotExist def load_template_source(template_name, template_dirs=None): try: return open(template_name).read(), template_name except IOError: raise TemplateDoesNotExist, template_name if you put this to your template loaders directory, TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.load_template_source', 'django.template.loaders.app_directories.load_template_source', 'dgrid.load_template_source' # 'django.template.loaders.eggs.load_template_source', You can do access a template using an absolute path. In [6]: get_template('/home/shabda/abc.txt') Out[6]: <django.template.Template object at 0x91c860c> In [7]: temp = get_template('/home/shabda/abc.txt') In [8]: temp Out[8]: <django.template.Template object at 0x9358a0c> In [9]: temp.render Out[9]: <bound method Template.render of <django.template.Template object at 0x9358a0c>> This is the first in the series of short and sweet Django posts we are going to do. You are interested, right. Do follow us on twitter or subscribe to our feed. We build Amazing We Apps. Talk to us or email us at sales@uswaretech.com . -
Django for a Rails Developer
This is not yet another Django vs Rails blog post. It is a compilation of notes I made working with Django after having worked on Rails for years. In this post I want to give a brief introduction to Django project layout from a Rails developer point of view, on what is there, what is not there and where to look for things. It should help a rails developer working on django be able to find the necessary files and underatnd the layout of the project files. Once you have both the frameworks installed on your system you can create the projects using the commands # creating a rails project rails rails_project # creating a Django project django-admin.py startproject django_project Lets look at the files and structure created by the respective frameworks #rails_project README Rakefile app/ controllers/ application_controller.rb helpers/ application_helper.rb models/ views/ layouts/ config/ boot.rb database.yml environment.rb environments/ development.rb production.rb test.rb initializers/ backtrace_silencers.rb inflections.rb mime_types.rb new_rails_defaults.rb session_store.rb locales/ en.yml routes.rb db/ seeds.rb doc/ README_FOR_APP lib/ tasks/ log/ development.log production.log server.log test.log public/ 404.html 422.html 500.html favicon.ico images/ rails.png index.html javascripts/ application.js controls.js dragdrop.js effects.js prototype.js robots.txt stylesheets/ script/ about console dbconsole destroy generate performance/ benchmarker profiler plugin runner server test/ … -
Django quiz
A quick django quiz. Answers available tomorrow. Get it as a text file (django-quiz) or on google docs or read below. ### Easy 1. You have a class defined as class Post(models.Model): name = models.CharField(max_length=100) is_active = models.BooleanField(default=False) You create multiple objects of this type. If you do Post.objects.get(is_active=False), what exceptions is raised? a. MultipleObjectsReturned b. ManyObjectsReturned c. SyntaxError d. MultipleModelReturned e. ManyModelReturned 2. Where is the function render_to_response defined? a. django.views b. django.shortcuts c. django.templates d. django.contrib.templates e. django.contrib.shortcuts 3. What is the default name for the table created for model named Post in application blog a. post_blog b. blog_post c. postblog d. blogpost e. Postblog 4. How do you send a 302 redirect using django? a. return HttpRedirectResponse() b. return HttpResponseRedirect() c. return HttpRedirectResponse(permanent=True) d. return HttpResponseRedirect(permanent=True) e. return HttpRedirectResponse 5. In django.contrib.auth, Users passwords are kept in what form? a. Plain text b. Hashed c. Encrypted d. Hashed then encrypted 3. Encrypted then hashed 6. Which of the following is correct way to find out if a request uses HTTP POST method? a. request.is_post() == True b. request.METHOD == 'post' c. request.METHOD == 'POST' d. request.method == 'post' e. request.method == 'POST' 7. Generic views have access … -
Python metaclasses and how Django uses them
Foss.in is without doubt India's largest FOSS technology conference. Lakshman gave a talk today on "Python metaclasses and how Django uses them". Here are the slides from that talk. Doing magic with python metaclassesView more documents from Usware Technologies. [Edit] Some reactions, http://twitter.com/jaideep2588/status/6295483833 http://twitter.com/kunalbharati/status/6296572939 And the talk images, http://twitpic.com/rxhn7 You should follow us on twitter and Subscribe to our blog -
Using bpython shell with django (and some Ipython features you should know)
What is bpython? bpython is a fancy interface to the Python interpreter for Unix-like operating system. says the bpython home page. It provides syntax highlighting, auto completion, auto-indentation and such stuff. Unlike iPython, which implements then entire shell functions and emulates the standard python shell, and adds enhancements, bpython just adds features on top of the existing python shell functionality, using the curses module. The "killer feature" of bpython is, as you can see from the image above, the IDE like prompting of the function parameters and the doc string of the function dynamically. I have always thought, what IntellijIDEA is to Java, IPython is to Python*. But bpython makes it more so, in terms of the code completion, which adds a lot of value to a ramping up developer. The only Python IDE that provides Source Assistant and Go-To-Source functionality conveniently, is the commercial one, Wing IDE Professional. Even with that, since all the defined models are replaced (by using meta-classes) in the runtime, that source assistant is not perfect. Newer versions of Wing seems to claim to obtain data dynamically at the runtime, but its not always comfortable to write code, keeping the IDE in a breakpoint. But … -
django-forum
twitter ready version: We have released a Django forum application, with some cool features not in any other Django based forum. You can get it here or see it in action. blog version There are quite a few Django based forum applications, so why another? Its a bit of a rhetorical question, as the answer is "none of them met my needs exactly, so we created my own", as you might expect. Without further ado here is a list of features. It is available on uswaretech.com/forum/. Based on, inspired by and ripped from PunBB. (Thanks!) PunBB like 3 phased hierarchy [Forum]->Subforum->Topic->Post Tightly integrated with Socialauth. (Screenshots) Gravatar support Moderation features (Close, stikify, make announcement etc.) Ajax based posting We are starting our forums based on this app, so we plan to be supporting and developing this for foreseeable future. Fork this on Github or check this out now. Screenshots Main page Post page Login Page We build amazing web apps. Contact us -
Doing things with Django forms
Forms are one of the best features of Django. (After models, admin, url routing etc :) ). Here is a quick tutorial describing how to do things with Django forms. Basic form Prob. You want to show a form, validate it and display it. Ans. Create a simple form. class UserForm(forms.Form): username = forms.CharField() joined_on = forms.DateField() This wil take care that the form is displayed with two text field, and a value for them are filled in, and the second field has correct formatting for a date. 2. Prob. Create a form which has values populated depending upon a runtime value, eg you might want to show only the values corresponding to the current subdomain. Ans. Create a form with an custom __init__. class UserForm(forms.Form): username = forms.CharField() plan = forms.ModelChoiceField(queryset = Plan.objects.none()) def __init__(self, subdomain, *args, **kwargs): self.default_username = default_username super(UserForm, self).__init__(*args, **kwargs) self.fields['plan'].queryset = Plan.objects.filter(subdomain = subdomain) Here in the __init__ we are overriding the default queryset on field plan. Any of the attributes can similarly be overridden. However the self.fields is populated only after super(UserForm, self).__init__(*args, **kwargs) is called. 3. Prob. The same form is used in multiple views, and handles the cleaned_data similarly. Ans. Create … -
Wordpress and Django: best buddies
Summary: How to integrate a non Django database system in your Django code, using Wordpress as example. The completed code is available at github or you can see some screnshots Though there are quite a few good Django blog applications, our blog is based on Wordpress. A number of plugin's make moving to a Django based app a bad decision for us, and not in the spirit of "best tools for the job". We moved the other way, and decided to use Django to admin the Wordpress database. The completed code is available on Github It is not too hard, with the the builtin Django commands. Django provides the inspectdb command which allows you to build your models.py from an existing non Django database. Here we will see the steps followed for Wordpress, but it would be about the same for all systems. Take a back up of wordpress mysqldump -u wordpress_user -p --database wordpress_database > data.sql Create a new project, and set its settings to use the Wordpress database. DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. DATABASE_NAME = '' # Or path to database file if using sqlite3. DATABASE_USER = '' # Not used with sqlite3. … -
Doing things with Django models - aka - Django models tutorial
Django abstracts most of the actions you would be doing with the Database. What it doesn't abstracts, and doesn't try to abstract is the Database modelling part. This is a quick tutorial describing to how model your data in Django models.py, and how to access and modify them. Consider a hypothetical HR department, which wants you to build an application to track and manage their processes. They have employees who work for a department, contractors who work for multiple department. Let's see how you you would do that in Django. from django.db import models class Employee(models.Model): name = models.CharField(max_length = 100) department = models.ForeignKey("Department") class Department(models.Model): name = models.CharField(max_length = 100) class EmployeeHistory(models.Model): employee = models.OneToOneField(Employee) date_joined = models.DateField() marital_status = models.BooleanField() class Contactor(models.Model): name = models.CharField(max_length = 100) departments = models.ManyToManyField(Department) Let's see the type of relationship we created here. An Employee has a Many-to-one relationship with Department, (i.e. One department will have many Employee, but one employee will have a single departments.) So Employee has a field department = models.ForeignKey("Department"). See that the ForeignKey field was added on the class which has in many. In database, this creates a FK from in Employee table which refernces Departments. A … -
Rails and Django commands : comparison and conversion
The most commonly used Rails commands and their Django equivalents Rails | Django rails console | manage.py shell rails server | manage.py runserver rake | None rails generate | None rails dbconsole | manage.py dbshell rails app_name | django-admin.py startproject/manage.py startapp rake db:create | manage.py syncdb The salient points to note are, Django has all commands via manage.py, Rails has it broken into rails and rake. Overall there are more Rails+Rake commands available than Django commands There is no one to one mapping between Rails and Django commands. Eg. There are no equivalent to rake doc:* or rake notes in Django. Similarly there is no equivalent to manage.py createsuperuser in rails. References http://docs.djangoproject.com/en/dev/ref/django-admin/ http://guides.rails.info/command_line.html http://github.com/uswaretech/Acts-as-Django/blob/master/commands.markdown -
Django is not flexible
Django is not flexible at all because you can not do simple things like. Using various authentication mechanisms. You can authenticate via Username, emails, Facebook, Twitter or any combination of these. Using different database backends. Use MySQL, PostgreSQL, Non-relational databases, more or a combination. Use different mail sending strategies. Send mail via smtp, queue to database, log to files and more. Different file storage method. Store locally, FTP, Amazon S3 or write your own. Store messages in Sessions, cookies or others. Cache things in Files, DB, Memcache or just fake it. Save sessions in files, DB, Memcache or cookies. Use Jinja, Mako or Gensi as templating library. One of the most lingering criticisms of Django has been that it is not flexible. People have criticised its design as too-tightly coupled, hard to extend, and inflexible. As a result, people have recommended to roll their own using SQLchemy, Jinja or web.py. I think this view is unfounded and wrong. You would be hard pressed to get the choices and flexibility which Django offers. Eg, while development I run with Sqlite, Dummy caching, and emails on console, while on production I switch to PostgreSQL, Memcache, and queued emails. Many apps use this … -
Getting trending Github projects via YQL
Github.com/explore allows you to see the trending Github topics. They use repopular.com for this, which use twitter retweets to find out the popular Github repos. Since neither Repopular, nor Github have a RSS of these trending repos, I wanted to get a list of these. Here is how easy it is with YQL. How we do it Go to YQL console. Give the SQL query to get the data from the webpage. where url="repopular.com" and css="div.pad a" is the magic which select the webpage, and also what DOM elemenst we are interested in. We get this data in JSON format which is munged to get the list of links. This list of links is passed via is_github_project which gets me just the Github projects. And we are done. PS. YQL is amazing. -
Importing wordpress
We now have a way to import wordpress to blogango, and all our old posts are on this blog. Thanks for reading.