国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python - @property裝飾器會(huì)影響到check_password_hash嗎?

瀏覽:109日期:2022-06-30 18:24:53

問(wèn)題描述

用flask來(lái)學(xué)習(xí)做一個(gè)博客,代碼如下:

# -*- coding:utf-8 -*-from flask import Flask,render_template,session,redirect,url_for,flash,requestfrom flask_login import LoginManager,login_required,UserMixin,login_user,logout_userfrom flask_bootstrap import Bootstrapfrom flask_sqlalchemy import SQLAlchemyfrom flask_wtf.file import FileFieldfrom flask_wtf import Formfrom wtforms import StringField,PasswordField,SubmitField,BooleanFieldfrom wtforms.validators import Requiredfrom werkzeug.security import generate_password_hash,check_password_hashimport pymssqlapp = Flask(__name__)app.config[’SQLALCHEMY_DATABASE_URI’] = ’mysql://root:password@localhost:3306/dh_inf_manage’app.config[’SQLALCHEMY_COMMIT_ON_TEARDOWN’] = Trueapp.config[’SQLALCHEMY_TRACK_MODIFICATIONS’] = Falseapp.config[’SECRET_KEY’] = ’hard to guess string’login_manager = LoginManager()login_manager.session_protection = ’strong’login_manager.login_view = ’login’login_manager.init_app(app)db=SQLAlchemy(app)bootstrap = Bootstrap()bootstrap.init_app(app)class NameForm(Form): name = StringField(u’用戶名:’,validators = [Required()]) password = PasswordField(u’密碼:’) submit = SubmitField(’Log In’) class LoginForm(Form): name = StringField(u’用戶名:’,validators = [Required()]) password = PasswordField(u’密碼’,validators = [Required()]) submit = SubmitField(u’登陸’) class User(UserMixin,db.Model): __tablename__ = ’dic_user’emp_sn = db.Column(db.String(50),primary_key = True) name = db.Column(db.String(45)) password = db.Column(db.String(128)) emp_dept_sn = db.Column(db.String(45),db.ForeignKey(’dic_dept.dept_sn’)) py_code = db.Column(db.String(50)) wb_code = db.Column(db.String(50)) autograph = db.Column(db.LargeBinary)def verify_password(self, password):return check_password_hash(self.password, password)@property def password(self):raise AttributeError(’password is not a readable attribute’)@password.setter def password(self, password):self.password = generate_password_hash(password) def __repr__(self):return ’<User %r>’ % self.username@login_manager.user_loaderdef load_user(user_id): return User.query.get(emp_sn) @app.route (’/’,methods=[’GET’,’POST’])def index(): return render_template(’index.html’)@app.route(’/login’, methods=[’GET’, ’POST’])def login(): form = LoginForm() if form.validate_on_submit():user = User.query.filter_by(emp_sn = form.name.data).first()if user is not None and user.verify_password(form.password.data): login_user(user) return redirect(url_for(’index’))flash (u’用戶名或密碼不正確’) return render_template(’login.html’,form = form)@app.route(’/logout’)@login_requireddef logout(): logout_user() flash(u’你已經(jīng)注銷!’) return redirect(url_for(’index’)) @app.errorhandler(404)def page_not_found(e): return render_template(’404.html’),404@app.errorhandler(500)def internal_server_error(e): return render_template(’500.html’),500if __name__ == ’__main__’: app.run(host = ’192.168.199.203’,port = 8035,debug = True)

運(yùn)行時(shí),打開登陸網(wǎng)頁(yè),輸入用戶名的密碼后,提示如下錯(cuò)誤:

File 'C:flaskrappShiftTurnover.py', line 74, in loginif user is not None and user.verify_password(form.password.data):File 'C:flaskrappShiftTurnover.py', line 48, in verify_passwordreturn check_password_hash(self.password, password)File 'C:flaskrappShiftTurnover.py', line 52, in passwordraise AttributeError(’password is not a readable attribute’)AttributeError: password is not a readable attribute

整個(gè)代碼,只有

@property def password(self):raise AttributeError(’password is not a readable attribute’)

這里拋出這個(gè)錯(cuò)誤,login函數(shù)并沒(méi)有對(duì)密碼進(jìn)行更改,為什么會(huì)有這樣的提示呢?

問(wèn)題解答

回答1:

真正原因找到了,主要的我數(shù)據(jù)庫(kù)的字段password與函數(shù)名password沖突了,把函數(shù)名稱改一下就可以了,我是改為password_hash。

@property def password_hash(self):raise AttributeError(’password is not a readable attribute’)@password_hash.setter def password_hash(self, password):self.password = generate_password_hash(password)回答2:

@password.setterdef password(self, password): self.password_hash = generate_password_hash(password)

應(yīng)該是self.password_hash而不是self.password, generate_password_hash是生成密碼散列值

標(biāo)簽: python
相關(guān)文章:
主站蜘蛛池模板: 亚洲精品区一区二区三区四 | 人成精品视频三区二区一区 | 美女国产福利视频 | 三级国产在线 | 亚洲精品午夜在线观看 | 手机看片神马午夜 | 国产伦精一区二区三区视频 | 久草视频新 | 欧美久久久久久久久 | 婷婷丁香花麻豆 | 亚洲经典三级 | 一级片免费网址 | 一级欧美日韩 | 久久精品国产精品亚洲20 | 欧美在线综合视频 | 久久com| 美女张开腿让我 | 国产网站黄 | 久久欧美成人精品丝袜 | 成人在线91| 成 人 动漫在线观看网站网站 | 在线播放国产一区二区三区 | 日韩美女视频一区 | 久久精品免费观看视频 | 91精品成人 | 天天躁天天碰天天看 | 韩国一级毛片在线观看 | 成人91 | 美女张开腿让男人桶的动态图 | 色播亚洲精品网站 亚洲第一 | 男女无遮挡拍拍拍免费1000 | 亚洲免费成人网 | 欧美日本在线视频 | 萝控精品福利视频一区 | 欧美大片一区二区三区 | 99久久精品国产一区二区 | 亚洲精品久久99久久 | 亚洲制服丝袜美腿亚洲一区 | 欧美一级高清毛片aaa | 亚洲成人精品 | 亚洲精品在线网 |