Python, flaskで作る入門ログイン機能 (windows)
「flaskを始めるために最初に何か作ってみたい。」
「flaskの基本的なコードを網羅したい」
これらの意見に沿えるように、flaskの入門的な「ログイン機能」のコードを紹介します。
flaskでよく使われる基本的なコードを網羅してご紹介します。
今回の実装を通して、基本的なコマンドを使えるようになり、応用を効かせるようになるでしょう。
webアプリを作るために使うコマンドなどを詰め込んだため、最後まで読んで理解すれば大きな成長となると思います。
目次(クリックで読みたい部分にジャンプできます)
この記事で身に着けられるコマンド
まず、この記事で使うコマンドをはじめに示しておきます。
- サーバーに情報を保存する - session
- 転送先を決める - redirect,url_for,render_template
- フォームから値を取得する - request.form
また、if文なども使いますが、今回はそれらの基本的なコマンドの説明は割愛します。
以下の記事で詳しく説明しているので、見てみたい方は併せてご覧ください。
次に、何を作るのかを紹介しましょう。
今回作るもの
今回は、簡単なログイン機能の実装をしていきます。
以下がログイン画面です。
ログイン後、指定のページを開きます。
では、さっそくコードの解説をしましょう。
コード解説
解説は以下の順で行っていきます。
- メイン機能
- ログイン処理
- ログアウト処理
処理の順番で解説していきます。
メイン機能
@app.route('/')
def index():
if not session.get('login'):
return redirect(url_for('login'))
else:
return render_template('index.html')
ここでは、(' / ')にアクセスがあった場合の処理を記述しています。
flaskでは、routeの機能があり、特定のURLにアクセスがあった時の処理を記述することができます。
session.get()
=セッションから情報を得るための関数です。
後述しますが、ここではsession['login']にTrueかFalseを格納しています。
sessionについて詳しく知りたい方は以下の記事で解説しています。
redirect()
=引数に指定したURLにリダイレクトします。
url_for()
=特定の関数へのURLを作成する。
今回だと、login とindexの二つの関数のURLを取得しています。
render_template()
=特定のファイルを開くことができます。また値を渡すことも可能です。
render_template('index.html' , a = 10)
のようにします。
index.html は好きなものを置いてください。
なお、関数liginは以下のように記載してます。
@app.route('/login')
def login():
return render_template('login.html')
ログイン処理
以下でログイン処理を行っています。
流れは、ログイン画面表示(login.html)→ログイン情報を判定の流れです。
まず、ログイン画面のlogin.htmlです。
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ログイン</title>
</head>
<body>
<h2>ユーザーIDとパスワードを入力してください</h2>
<form method="POST" action="/logincheck">
<input placeholder="ユーザーID" type="text" name="user_id">
<input placeholder="パスワード" type="password" name="password">
<input type="submit" value="送信">
</form>
</body>
</html>
<form>の中に記述しているinput要素が、app.pyに提出されるものです。
送信ボタンを押すとそれらがapp.pyに送られます。
それらを以下で判定します。以下app.pyのファイル。
id_pwd = {'lelouch' : 'vermillion'}
@app.route('/logincheck', methods=['POST'])
def logincheck():
user_id = request.form['user_id']
password = request.form['password']
if user_id in id_pwd:
if password == id_pwd[user_id]:
session['login'] = True
else:
session['login'] = False
else:
session['login'] = False
if session['login']:
return redirect(url_for('index'))
else:
return redirect(url_for('login'))
request.form[]
=フォームからの値を取得しています。引数にはformのname値を入れます。
if文では、それらがログイン情報にあるかどうかを判定しています。
含まれている場合は、session['login']にTrueを保存しておきます。
今回は、sessionに真偽値しか入れていませんが、ユーザー固有の情報(ユーザーID)を保存することもあります。
そうすることで、ユーザーのMypageを作成するときなどに、sessionの値を用いることができます。
ログアウト処理
最後はログアウトの処理です。
ここでは、sessionで保存していた値を削除するだけで問題ありません。
なので、そんなに難しくないです。
@app.route('/logout')
def logout():
session.pop('login',None)
return redirect(url_for('index'))
session.pop()
=sessionにある情報を削除します。
後は、一番初めに説明した、メイン機能のindex関数にリダイレクトする流れになっています。
まとめ
今回は、flaskの入門編としてログイン処理を解説しました。
今回は、ログイン情報をapp.pyにベタ貼りしていますが、実際にはDBに保存することでユーザー情報を管理します。
以下の記事では、ログイン機能をDBに接続して実装していますので、この記事を理解できた人は、次のステップとして読んでみてください。