プログラミングを初めて1年程度の者になります。
現在Python, FlaskでWebアプリ開発をしているのですが、その中で関数へ引数を与える方法について混乱してしまったので質問させていただければと思います。
#具体的な課題
まず下記のコードを用いてパスワードをハッシュ化させてDBにハッシュ値を格納するためのテーブルとメソッドをそれぞれ定義しています。
Python
1from flask_sqlalchemy import SQLAlchemy 2from . import db 3from werkzeug.security import generate_password_hash, check_password_hash 4 5class User(db.Model): 6 __tablename__ = 'users' 7 id = db.Column(db.Integer, primary_key = True) 8 password_hash = db.Column(db.String(128)) 9 10 @property 11 def password(self): 12 raise AttributeError('password is not readable attribute') 13 14 @password.setter 15 def password(self, password): 16 self.password_hash = generate_password_hash(password) 17 18 def verify_password(self, password): 19 return check_password_hash(self.password_hash, password)
次にterminalでflask shellを起動し、下記のように動作確認をしています。
from app.models import User u = User() u.password()
これを入力すると
AttributeError: password is not readable attribute
となり、想定通りの動作となります。次にパスワードのハッシュ化に関して動作確認をしようと
u.password('cat') #catがパスワード想定
とシェルで入力し、実行すると先と同様のAttributeError
が発生します。
代わりに
u.password = 'cat'
とするとパスワードのハッシュ化がされ、u.password_hash
で当該ハッシュ値を表示することができます。
なぜこのような引数の渡し方になるのかが分からず、お知恵をお借りできればと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。