プログラミング学習

【Python】別のファイルを読み込んでみよう

投稿日:

Pythonでは「別のpyファイル」を読み込んで、そこに記述してある「変数」や「関数」などを使うことができるようです。

今回はその「インポート方法」を見ていきましょう。

別のpyファイルをインポートしてみよう

今回試していく「pyファイル」は「Flask-WTF」を使って「入力フォーム」を作成した時のものを使っていきます。

「Flask-WTF」についてはこちら。

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import InputRequired, Length, AnyOf

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'

class LoginForm(FlaskForm):
   username = StringField('ユーザー名', validators=[InputRequired(), Length(min=8, max=16, message='8文字以上16文字以下で入力してください')])
   password = PasswordField('パスワード', validators=[InputRequired(), AnyOf(values=['password'], message='パスワードが違います')])

@app.route('/form', methods=['GET', 'POST'])
def form():
   form = LoginForm()
   if form.validate_on_submit():
      return '<h1>ユーザー名は {}. パスワードは {}.'.format(form.username.data, form.password.data)
   return render_template('form.html', form=form)

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

このコードを2つの「pyファイル」に分けて使ってみましょう。

今回の分け方

  1. 「main.py」メインの部分(Flask)
  2. 「forms.py」フォームの部分(Flask-WTF)

こんな感じで進めていきます。

pyファイルを分けてみよう

1.main.py

from flask import Flask, render_template

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'

@app.route('/', methods=['GET', 'POST'])
def form():
   form = LoginForm()
   if form.validate_on_submit():
      return '<h1>ユーザー名は {}. パスワードは {}.'.format(form.username.data, form.password.data)
   return render_template('form.html', form=form)

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

2.forms.py

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, HiddenField, SubmitField
from wtforms.validators import InputRequired, Length, AnyOf

class LoginForm(FlaskForm):
   username = StringField('ユーザー名', validators=[InputRequired(), Length(min=8, max=16, message='8文字以上16文字以下で入力してください')])
   password = PasswordField('パスワード', validators=[InputRequired(), AnyOf(values=['password'], message='パスワードが違います')])

単純に分けてみるとこうなります。
しかしこのままでは動作しませんね。

別のファイルからインポートしよう

今回の場合は「forms.py」ファイルから「LoginForm」クラスをインポートしています。

from flask import Flask, render_template

-------------------------------------------

from forms import LoginForm 

-------------------------------------------

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'

@app.route('/', methods=['GET', 'POST'])
def form():
   form = LoginForm()
   if form.validate_on_submit():
      return '<h1>ユーザー名は {}. パスワードは {}.'.format(form.username.data, form.password.data)
   return render_template('form.html', form=form)

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

こうすることで「form」関数内の「form = LoginForm()」が成り立ちますね。

実行してみよう

「VSCode」で実行していきます。

「入力フォーム」に入力してみます。

問題なく動作しているようですね。

まとめ

今回は別の「pyファイル」の読み込みをしてみました。
これを使えば一度書いたコードはどこにでも使えそうですね。

今回は「同じ階層」のファイルをインポートしたのですが「別の階層」だとどうなるのでしょうか。
調べてみたいと思います。
それではまた。

-プログラミング学習
-

執筆者:


comment

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

関連記事

ローカル掲示板②

前回作成したベースにPHPを追加していきます。 PHPの追加 参考サイト:https://www.sejuku.net/blog/97648 —————————-↓ …

【Python】「from ~ import ~」 の使い方

Pythonコードを見ていると「from ~ import ~ 」という記述をよく見ると思いますが、どういう意味なのでしょうか。今回は「from ~ import ~ 」の使い方を紹介したいと思います …

【Python】Excelを操作してみよう

今まで「Excelの自動化」ということで「VBA」について触れてきましたが、PythonでもExcelを操作できることを知っていますか?今回は、Excelを操作できるライブラリの「openpyxl」を …

【Python】ログイン機能を作る「Flask-Login」⑤

「ログイン機能を作る」【Part5】を書いていきます。前回作成した「入力フォーム」からログインできる機能を追加していきます。 ログイン機能を追加しよう 今回は、決められた「name(名前)」,「mai …

【Python】ログイン機能を作る「Flask-Login」⑧

「ログイン機能を作る」の【Part8】いってみましょう。前回は「ログイン処理」を変更しました。今回からは「新規アカウント作成」の機能を作っていこうと思います。 アカウントの登録機能を作ろう では「アカ …