RkBlog

Hardware, programming and astronomy tutorials and reviews.

Middleware w Django

Obsługa własnych klas middleware w aplikacjach Django. Za pomocą middleware możemy operować na nadpływających do widoku żądaniach HTTP, czy wynikach zwracanych przez te widoki

Middleware w Django to niskopoziomowy system "wtyczek" wpływających na dane przesyłane do i z aplikacji Django. Obrazując middleware to kod, który będzie automatycznie wykonywany przed/po wykonaniu widoku, przed wysłaniem odpowiedzi do klienta (przeglądarki) itp. Django posiada zestaw gotowych skryptów middleware opisanych w jego dokumentacji, lecz oprócz nich możemy również tworzyć własne skrypty middleware.

Obsługa Middleware

W settings.py mamy kod w postaci:
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.doc.XViewMiddleware',)
Domyślna lista aktywnych skryptów middleware, do której możemy dopisać własne, np.:
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.doc.XViewMiddleware',
    'stats.statsMiddleware.statsMiddleware',)
stats.statsMiddleware.statsMiddleware odpowiada NAZWA_APLIKACJI.NAZWA_PLIKU.NAZWA_KLASY. W powyższym przykładzie mam aplikację-katalog "stats", a w nim plik statsMiddleware.py o kodzie:
from stats.models import *
from datetime import datetime

class statsMiddleware(object):
	def process_request(self, request):
		try:
			today = str(datetime.today())[:10]
			unique = Stat.objects.filter(ip = request.META['REMOTE_ADDR'], date = today).count()
			if unique < 1:
				if not request.META.has_key('HTTP_REFERER'):
					request.META['HTTP_REFERER'] = ''
				s = Stat(ip = request.META['REMOTE_ADDR'], referer = request.META['HTTP_REFERER'], date = today)
				s.save()
		except:
			pass
Powyższy skrypt middleware wykona się dla każdego żądania, a jego celem jest dodanie wpisu do statystyk odwiedzin (dane IP zapisane raz w danym dniu).

API Middleware

Skrypty middleware moga być wykonywane w określonych okolicznościach - zależnie od zastosowanej metody middleware:
RkBlog

14 July 2008;

Comment article