• Skip to main content
  • Skip to primary sidebar
  • ホーム
  • お問い合わせ

ハイパー仕事し隊

思い立った吉日!イロイロ試してオンリーワンの起業家を目指してます!

現在の場所:ホーム / ウェブアプリ関連 / Flask でよく利用するコードまとめ

Flask でよく利用するコードまとめ

2018年8月13日

Flask でアプリを作成する際に、よく (というか確実に) 利用するコードをまとめました。

オススメの利用方法

  • Flask をこれから触る場合は、前もってどんなコードを書くのかをざっくり知る
  • Flask を一通り学んだあとに、要約版として

プロジェクトファイルの構成

モジュールの場合とパッケージの場合で変わります。

ベストプラクティスとして こちら を参照しましした。

モジュールの場合

├─ app.py
├─ config.py
├─ requirements.txt
├─ static
│      └─[css_file].css
└──templates
        ├─ [html_file1].html
        └─ [html_file2].html

パッケージの場合

├─config.py
├─requirements.txt
├─run.py
├─instance/
│   └─ config.py
└─yourapp/
    ├─ __init__.py
    ├─ views.py
    ├─ models.py
    ├─ forms.py
    ├─ static
    │   └─ [css_file].css
    └─ templates
         ├─ [html_file1].html
         └─ [html_file2].html

 

ベースコード

Flask アプリは、flask.Flask() クラスから、アプリインスタンスを生成する必要があります。
“__name__” を渡しているのは、ルートパスを把握するためです。(Flask が “static” や “templates” フォルダーの場所を知るため)

from flask import Flask

app = Flask(__name__)

@app.route('/hello')
def hello():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(debug=True)

app.run()は、デフォルトでローカスホスト (= 127.0.0.1) & ポート 5000 を利用します。

Routing (ルーティング)

ルーティングとは、URL とビュー関数 (リクエストに応じた動作を定義している関数) を紐付けるものです。
@app.route() で設定するのが一般的 & 簡単です。

@app.route('/hello/<name>')
def hello(name):
    return "Hello {} !".format(name)

@app.route(‘/hello/’) の最後のスラッシュ (“/”) ある・なしで動作がかわりますよ!

  • スラッシュあり (@app.route(‘/hello/’))
    • [exmple.com/hello], [exmple.com/hello/] ともに [exmple.com/hello/] となる
  • スラッシュなし (@app.route(‘/hello’))
    • [exmple.com/hello] のリクエストで、このデコレータで定義したビュー関数が実行される
    • [exmple.com/hello/] のリクエストは、404 になる (Page Not Found)

&gtname&lt などの動的な変数を受け付けることもできます。

デフォルトは、str (>name< は、>str:name< として扱われる) として処理します。

他にも、int, float, path (ルーティングのパス) が利用できます。

リクエストメソッドの指定

クライアントから受け付ける HTTP メソッドを指定できます。

デフォルトでは、GET リクエストのみ受け付けます。

@app.route('/test') # 特に指定がないので GET リクエストのみ
@app.route('/test', methods=['GET', 'POST'])
@app.route('/test', methods=['PUT'])

Configuration

app.config[‘SECRET_KEY’]と直接、値を設定することもできますし、別ファイルで定義したものをインポートすることもできます。

こちらで確認できます。http://flask.pocoo.org/docs/1.0/api/#flask.Config

また、app.config で設定できるものは、インストールしたプラグインモジュールによりますので、必要に応じてマニュアルを見ましょ。

HTML テンプレート

Flask では、jinja2 テンプレートを利用しています。

from flask import render_template

@app.route('/')
def index():
    return render_template('template_file.html', var1=value1, ...)

var1 は jinja2 テンプレート ([html_file].html] 内で扱う変数になります。

なので、jinja2 テンプレート内でも、object & list & dictionary が扱えます。

if 分や for 文と組み合わせることで、汎用的なテンプレートが作成できます。

JSON レスポンス

JSON レスポンスがちゃちゃっと実装できますので、Web API の提供が簡単にできます。

from flask import jsonify

@app.route('/api/return_some_stuff')
def return_some_stuff():
    num_list = [1,2,3,4,5]
    num_dict = {'numbers' : num_list, 'name' : 'Numbers'}

    #returns {'output' : {'numbers' : [1,2,3,4,5], 'name' : 'Numbers'}}
    return jsonify({'output' : num_dict})

 

リクエストデータの取扱

フォームから送付された情報は、オブジェクトとして簡単に取得できます。

from flask import request

request.args['name']
request.form['name']
request.method # HTTP リクエストの種類
request.cookies.get('cookie_name') # クッキーを取得

 

Redirect (リダイレクト)

url_for() と組み合わせて、ページをリダイレクトできます。

from flask import url_for, redirect

@app.route('/')
def index():
    return render_template('home.html')

@app.route('/redirect/')
def redirect_example():
    # url_for で index() に紐付いた URL を生成
    # 生成された URL にリダイレクト
    return redirect(url_for('index')) 

 

Abort

エラーハンドラとして利用します。

from flask import abort

@app.route('/user/')
def get_user(id):
    user = get_user(id)
    if not user:
        abort(404) # 404 エラーを返す
    return "hello, {}".format(user.name)

 

Cookie 設定

レスポンスオブジェクトを make_response()で生成し、そのオブジェクトにクッキー情報を格納できます。

from flask import make_response

@app.route('/')
def index():
    response = make_response(render_template('index.html'))
    response.set_cookie('cookie_name', 'cookie_value')
    
    return response

 

Session の取扱い

クッキーはブラウザ側で編集が可能なため、サーバー側でもセッション情報を保持する必要があります。

import session

app.config['SECRET_KEY'] = 'random_string' # os.urandom() などで生成

# session を定義
@app.route('/login_success')
def login_success():
    session['key_name'] = 'key_value' 
    return redirect(url_for('index'))

# read session
@app.route('/')
def index():
    if 'key_name' in session:
        session_var = session['key_value']

 

便利なプラグイン

こちらから プラグインを検索できます。

カテゴリー: ウェブアプリ関連
タグ: flask, python

最初のサイドバー

簡単な自己紹介

ごく普通の 30 代サラリーマンです。世界を旅しながらの生活が目標!!
IT 全般に興味あり: Python (Flask, Django) / PHP (Laravel, Wordpress) / Golang / AWS / Network Security.
Read More…

サイト内検索

最近の投稿

  • 【VS Code プラグイン】Postman より便利!? Rest Client をオススメする理由
  • MySQL と phpMyAdmin を Docker Compose で作って、Python から接続する
  • Windows10 上の Ubuntu から “curl localhost” を実行すると “Connection refused” になる原因
  • リダイレクトの仕組み知ってる?Flask で調べるてみるのだ。
  • Apple 独自の 検索エンジンで何が変わるのか

アーカイブ

  • 2021年3月
  • 2021年1月
  • 2020年10月
  • 2019年3月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年5月
  • 2018年4月

タグ

amazon cloudfront amazon s3 aws coursera css django docker flask fullstack gcp github hawaii life in USA linux mongodb mysql postgresql pwa python sqlite vagrant

Contact
Privacy Policy and Term of Use
Copyright © 2025 · All rights reserved.