Django リダイレクト – Django ページにリダイレクトを追加する方法とは?

スポンサーリンク

今回は、Django Http ライブラリを使った Django のリダイレクトについて学びます。リダイレクトメソッドのユースケースと応用について簡単に説明します。

スポンサーリンク

なぜ Django でリダイレクトが必要なのでしょう?

別のサイトへのリダイレクションは、Web アプリケーションに不可欠な部分です。これはウェブページの効率を高めます。

  • Facebook を例にとると、もしあなたがまだログインしていないなら、FB の URL を叩くとすぐにログイン認証サイトにリダイレクトされます。ここでリダイレクトの出番となるわけです。
  • 同様に、オンライン取引の際も、決済が確認されると、確認ページにリダイレクトされます。
  • リダイレクトのもう一つの利点は、URL短縮に役立つということです-例えば、https://bit.ly。例えば、。ここでは、短いURLを入力すると、元の長いURLにリダイレクトされます。

このように、リダイレクトはウェブ開発において重要な役割を担っています。さて、リダイレクトが何に使われるかが分かったところで、早速、その中に飛び込んでみましょう!

Django の redirect() 関数

ウェブページを redirect() 関数でリダイレクトするには、3つの方法があります。

  1. Views を引数として使う
  2. URL を直接引数として使う

それぞれについて詳しく見ていきましょう。

記事を格納するモデルテーブルと、それらをリンクする機能Viewを必要とするウェブページを作成してみましょう。

redirect() を処理するための前提条件

最初のリダイレクトを作成するために必要なコードの基礎となる部分がいくつかあります。ここでは基本的な必要条件を追加しています。

1. Django モデルを構築する

ArticleModel というモデルを作成し、以下のフィールドを追加します。

class ArticleModel(models.Model):
    author = models.CharField(max_length = 80)
    article_title = models.CharField(max_length = 80)
    article = models.TextField()
 
    class Meta:
        ordering = [ 'article_title']
 
    def __str__(self):
        return f"{self.article_title} by {self.author}"

マイグレーションを実行し、DBにテーブルを作成します。

python manage.py migrate
python manage.py makemigrations

ArticleModel DB にいくつかのオブジェクトも追加してみましょう。

Article Model
Article Model

2. Django のビューを作成する

ArticleView を作成し、以下のコードを追加します。

def ArticleView(request,title):
    article = ArticleModel.objects.get(article_title = title)
    return HttpResponse(article)

ここでは、ユーザが検索した記事を表示します。この View の URL パスです。

path('article/<article_name>', ArticleView, name=ArticleView),

3. 検索フォームのコード化

ユーザーを特定の記事にリダイレクトさせるための検索フォームが必要です。

フォームに慣れていなくても心配いりません。以下のコードをプロジェクトの forms.py ファイルにコピーペーストしてください。

class ArticleForm(forms.Form):
    title = forms.CharField(max_length =80)

もし必要なら、 Django Forms の記事 を参照してください。

4. 表示用テンプレートの作成

ここでは、SearchFormを表示するためのテンプレートを使用します。

FormsやTemplatesに慣れていなくても、以下のHTMLコードをtemplatesフォルダに追加するだけなので、心配はいりません。

<form method ='post'>
    {% csrf_token %}
    {{form.as_p}}
    <input type="submit" value = "Submit">
</form>

それでは、redirect()関数のコードに戻りましょう。

Django の redirect() メソッドを追加する

さっそく redirect メソッドを使って、最初の Django リダイレクトを構築してみましょ う。

1. 引数としてビューを使用する

この場合、Django の redirect() メソッドの構文は以下のようになります。

redirect('<view_name>',<view_arguments>)

ここでは、ユーザが記事のウェブページにリダイレクトされる検索フォームを使用します。

次のビューを views.py に追加します。

from django.shortcuts import redirect
 
def SearchView(request):
 
    if request.method == 'POST':
        form = ArticleForm(request.POST)
 
        if form.is_valid():
            title = form.cleaned_data['title']
            return redirect('ArticleView', title = title)
         
    else:
        form = ArticleForm()
        context ={
            'form':form,
        }
    return render(request, '<app_name>/Form.html(path to the template)', context)

ここでは、このビューを上記の ArticleView にリダイレクトしています。このビューのURLパスです。

path('articles/search', SearchView)

2. 引数として直接URLを指定する場合

この場合、redirect()のシンタックスは以下のようになります。

redirect('URL')

views.pyに以下のViewを追加します。このViewを、例えばaskpythonのホームページにリダイレクトしてみましょう。

def URLView(request):
    return redirect('https://wwww.askpython.com')

このビューのURLパスです。

path('redirect/', URLView)

以上でコーディングは完了です。では、実装してみましょう。

ビューを実装する

サーバーを起動し、”articles/search/”にアクセスします。

Search Form
Search Form

submitを押すと、ブラウザはArticleViewにリダイレクトされます。

Article View
Article View

2つ目のコードを実行します。

ローカルのブラウザで「127.0.0.1:8000/redirect/」と入力し、Enterキーを押してください。AskPythonのサイトへリダイレクトされます。

Ask python
Ask python

redirect()関数を使うことで、Webページがいかに効率的になるかを見てみましょう。

結論

以上、皆さん!

練習として、 Django のリダイレクトを URL 短縮として使ってみることができます。試してみてください。

Django のリダイレクトと、それを使ってあなたの Web サイトをより速く、より効率的にする方法について、よく理解してもらえたと思います。練習を続けてください

タイトルとURLをコピーしました