Membuat Custom Middleware di Django 1.8 dan 1.10.5

Apa fungsi middleware? Banyak, salah satunya adalah melakukan sesuatu sebelum atau sesudah request di jalankan. Pada salah satu project, saya ingin me-redirect semua request yang di URL mengandung parameter 'PageSpeed' ke halaman itu juga namun parameter 'PageSpeed' dihilangkan. Bingung ya? Begini contohnya:



URL ini:
http://www.example.com/read/1?PageSpeed=noscript

ingin saya redirect ke
http://www.example.com/read/1

Kenapa ada 2 versi Django? Karena membuat custom middleware di kedua versi tersebut berbeda. Dan inilah custom middleware yang saya buat:

Django 1.8
import re

from django.http import HttpResponsePermanentRedirect


class StripPageSpeedMiddleware(object):
def process_request(self, request):
req = request.build_absolute_uri()

if 'PageSpeed=noscript' in req:
clean_url = re.sub('[?&]PageSpeed=noscript', '', req)
return HttpResponsePermanentRedirect(clean_url)

Django 1.10.5
import re

from django.http import HttpResponsePermanentRedirect


def StripPageSpeedParam(get_response):
# One-time configuration and initialization.

def middleware(request):
# Code to be executed for each request before
# the view (and later middleware) are called.

req = request.build_absolute_uri()
if 'PageSpeed' in req:
clean_url = re.sub('[?&]PageSpeed=noscript', '', req)
return HttpResponsePermanentRedirect(clean_url)

response = get_response(request)

# Code to be executed for each request/response after
# the view is called.

return response

return middleware

Simpan baris kode di atas ke dalam sebuah file di
myapp/mymiddleware.py

Kemudian panggil di settings.py

MIDDLEWARE_CLASSES untuk Django 1.8 atau MIDDLEWARE di Django 1.10.5. Contoh
MIDDLEWARE = [
...
'myapp.mymiddleware.StripPageSpeedParam',
]

Comments

  1. […] Membuat Custom Middleware di Django 1.8 dan 1.10.5 […]

    ReplyDelete
  2. […] Satu sisi bermanfaat, namun dari sisi SEO, adanya 2 halaman dengan content yang sama maka akan dipandang sebagai duplicate content, dan ini tentu saja tidak baik untuk kesehatan SEO website kita. Kalau halaman-halaman dengan parameter PageSpeed=noscript belum terlanjur terindeks, segera tambahkan baris kode di atas. Jika sudah terlanjur, segera bersihkan dengan menambahkan canonical url dan me-redirect halaman-halaman dengan param tersebut (Jika Anda menggunakan Django, silakan lihat cara membuat tulisan saya tentang custom middleware). […]

    ReplyDelete

Post a Comment

Popular posts from this blog

Adding Image Alternate Text into WordPress Image Attachment using python-wordpress-xmlrpc Library

Keutamaan Tidur yang Sedikit Menurut para Ulama

Kisah Nabi Uzair a.s.