Aplikasi pengalihan

Django comes with an optional redirects application. It lets you store redirects in a database and handles the redirecting for you. It uses the HTTP response status code 301 Moved Permanently by default.

Pemasangan

Untuk memasang aplikasi pengalihan, ikuti langkah-langkah ini:

  1. Pastikan bahwa kerangka kerja django.contrib.sites is installed.
  2. Tambah pengaturan 'django.contrib.redirects' to your INSTALLED_APPS.
  3. Tambah 'django.contrib.redirects.middleware.RedirectFallbackMiddleware' ke pengaturan MIDDLEWARE anda.
  4. Jalankan perintah manage.py migrate.

Bagaimana itu bekerja

manage.py migrate creates a django_redirect table in your database. This is a lookup table with site_id, old_path and new_path fields.

RedirectFallbackMiddleware melakukan semua dari pekerjaan. Setiap kali aplikasi Django apapun memunculkan kesalahan 404, middleware ini memeriksa pengalihan basisdata untuk URL diminta sebagai usaha terakhir. Khususnya, itu memeriksa untuk pengalihan dengan diberikan old_path dengan ID situs yang berhubungan pada pengaturan SITE_ID.

  • Jika itu menemukan sebuah kecocokan, dan new_path tidak kosong, itu mengalihkan ke new_path menggunakan sebuah pengalihan 301 ("Dipindah tetap"). Anda dapat men sub kelaskan RedirectFallbackMiddleware dan setel response_redirect_class menjadi django.http.HttpResponseRedirect untuk menggunakan sebuah pengalihan 302 Moved Temporarily sebagai gantinya.
  • Jika itu menemukan kecocokan, dan new_path adalah kosong, itu mengirim sebuah 410 ("Gone") kepala HTTP dan tanggapan (kurang-isi) kosong.
  • Jika itu tidak menemukan kecocokan, permintaan berlanjut untuk diolah seperti biasa.

Middleware hanya dapat diaktifasikan untuk 404 -- bukan untuk 500 atau tanggapan kode keadaan apapun lainnya.

Catat bahwa urutan daru hal-hal MIDDLEWARE. Umumnya, anda dapat menaruh RedirectFallbackMiddleware pada akhir dari daftar, karena itu adalah usaha terakhir.

Untuk lebih pada middleware, baca dokumentasi middleware.

Bagaimana menambah, merubah dan menghapus pengalihan

Melalui antarmuka admin

Jika anda telah mengaktifkan antarmuka admin Django otomatis, anda harus melihat bagian "Redirects" pada halaman indeks admin. Sunting pengalihan ketika anda menyunting obyek lain apapun di sistem.

Melalui API Python

class models.Redirect

Redirects are represented by a standard Django model, which lives in django/contrib/redirects/models.py. You can access redirect objects via the Django database API. For example:

>>> from django.conf import settings
>>> from django.contrib.redirects.models import Redirect
>>> # Add a new redirect.
>>> redirect = Redirect.objects.create(
...     site_id=1,
...     old_path="/contact-us/",
...     new_path="/contact/",
... )
>>> # Change a redirect.
>>> redirect.new_path = "/contact-details/"
>>> redirect.save()
>>> redirect
<Redirect: /contact-us/ ---> /contact-details/>
>>> # Delete a redirect.
>>> Redirect.objects.filter(site_id=1, old_path="/contact-us/").delete()
(1, {'redirects.Redirect': 1})

Middleware

class middleware.RedirectFallbackMiddleware

Anda dapat merubah kelas-kelas HttpResponse digunakan oleh middleware dengan membuat sebuah subkelas dari RedirectFallbackMiddleware dan terutama response_gone_class dan/atau response_redirect_class.

response_gone_class

Kelas HttpResponse digunakan ketika Redirect tidak ditemukan untuk jalur yang diminta atau mempunyai nilai new_path kosong.

Awalan pada HttpResponseGone.

response_redirect_class

Kelas HttpResponse yang mengangani pengalihan.

Awalan pada HttpResponsePermanentRedirect.