Python, flaskで作る入門ログイン機能 (windows)

「flaskを始めるために最初に何か作ってみたい。」
「flaskの基本的なコードを網羅したい」

これらの意見に沿えるように、flaskの入門的な「ログイン機能」のコードを紹介します。

flaskでよく使われる基本的なコードを網羅してご紹介します。

今回の実装を通して、基本的なコマンドを使えるようになり、応用を効かせるようになるでしょう。

webアプリを作るために使うコマンドなどを詰め込んだため、最後まで読んで理解すれば大きな成長となると思います。

この記事で身に着けられるコマンド

まず、この記事で使うコマンドをはじめに示しておきます。

  1. サーバーに情報を保存する - session
  2. 転送先を決める - redirect,url_for,render_template
  3. フォームから値を取得する - request.form

また、if文なども使いますが、今回はそれらの基本的なコマンドの説明は割愛します。

以下の記事で詳しく説明しているので、見てみたい方は併せてご覧ください。

次に、何を作るのかを紹介しましょう。

今回作るもの

今回は、簡単なログイン機能の実装をしていきます。

以下がログイン画面です。

ログイン画面

ログイン後、指定のページを開きます。

では、さっそくコードの解説をしましょう。

コード解説

解説は以下の順で行っていきます。

  1. メイン機能
  2. ログイン処理
  3. ログアウト処理

処理の順番で解説していきます。

メイン機能

@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に接続して実装していますので、この記事を理解できた人は、次のステップとして読んでみてください。

(Visited 10 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA