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.
Untuk memasang aplikasi pengalihan, ikuti langkah-langkah ini:
django.contrib.sites
is installed.'django.contrib.redirects'
to your INSTALLED_APPS
.'django.contrib.redirects.middleware.RedirectFallbackMiddleware'
ke pengaturan MIDDLEWARE
anda.manage.py migrate
.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
.
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.new_path
adalah kosong, itu mengirim sebuah 410 ("Gone") kepala HTTP dan tanggapan (kurang-isi) kosong.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.
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.
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.
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
.
Apr 06, 2021