今回は、Django Http ライブラリを使った Django のリダイレクトについて学びます。リダイレクトメソッドのユースケースと応用について簡単に説明します。
なぜ Django でリダイレクトが必要なのでしょう?
別のサイトへのリダイレクションは、Web アプリケーションに不可欠な部分です。これはウェブページの効率を高めます。
- Facebook を例にとると、もしあなたがまだログインしていないなら、FB の URL を叩くとすぐにログイン認証サイトにリダイレクトされます。ここでリダイレクトの出番となるわけです。
- 同様に、オンライン取引の際も、決済が確認されると、確認ページにリダイレクトされます。
- リダイレクトのもう一つの利点は、URL短縮に役立つということです-例えば、https://bit.ly。例えば、。ここでは、短いURLを入力すると、元の長いURLにリダイレクトされます。
このように、リダイレクトはウェブ開発において重要な役割を担っています。さて、リダイレクトが何に使われるかが分かったところで、早速、その中に飛び込んでみましょう!
この記事もチェック:Djangoでログイン認証機能を自作する方法を分かりやすく解説する
Django の redirect() 関数
ウェブページを redirect() 関数でリダイレクトするには、3つの方法があります。
- Views を引数として使う
- 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 にいくつかのオブジェクトも追加してみましょう。
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 の記事 を参照してください。
この記事もチェック:Djangoで入力フォームを作ってユーザーの入力を受け付ける方法
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/”にアクセスします。
submitを押すと、ブラウザはArticleViewにリダイレクトされます。
2つ目のコードを実行します。
ローカルのブラウザで「127.0.0.1:8000/redirect/」と入力し、Enterキーを押してください。AskPythonのサイトへリダイレクトされます。
redirect()関数を使うことで、Webページがいかに効率的になるかを見てみましょう。
結論
以上、皆さん!
練習として、 Django のリダイレクトを URL 短縮として使ってみることができます。試してみてください。
Django のリダイレクトと、それを使ってあなたの Web サイトをより速く、より効率的にする方法について、よく理解してもらえたと思います。練習を続けてください