【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ファイル」の読み込みをしてみました。
これを使えば一度書いたコードはどこにでも使えそうですね。

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

  • X

コメントを残す

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