# Dokumentasi Django 5.2.8

# 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`.