How to config it
------------------
You can treat it as a micro url filter framework. Before you using it, you should setup some options about it. The option entry shoud be like this:
FILTERS = (
(r'^user/(?P<user_id>\d+)/', 'apps.users.filter.check_valid_user'),
)
FILTERS should be a list or tuple with two elements tuple item. The format should be like:
(url_patterns, function)
And url_patterns could be a single regex expression or a list/tuple regex expressions, So you can set multi regex expression in it. And the regulation is just like url dispatch, as above example, the url pattern is:
r'^user/(?P<user_id>\d+)/'
So you can see, you can set parameter name `user_id`, then it'll be passed to the function behind.
Function can be a string format, just like above example, and it can be also a real function object.
It'll only impact request.
How to write filter function
-------------------------------
According above example, I define a url pattern, and what to check if the user is a valid user, and if the user is visiting his own urls, so the filter function could be:
from django.contrib.auth.models import User
from utils.common import render_template
def check_valid_user(request, user_id):
if request.user.is_anonymous():
return render_template(request, 'users/user_login.html', {'next':'%s' % request.path})
try:
person = User.objects.get(pk=int(user_id))
except User.DoesNotExist:
return render_template(request, 'error.html', {'message':_("User ID (%s) is not existed!") % user_id})
if person.id != request.user.id:
return render_template(request, 'error.html', {'message':_('You have no right to view the page!')})
I think the code is very clear.
And you can use it filtermiddleware to do like user authentication check, and other checking for url.
BTW, render_template is comes from [Snippets #4](http://www.djangosnippets.org/snippets/4/)