Python flask實現登陸密碼雜湊加密 驗證

2021-10-07 12:26:03 字數 3082 閱讀 7753

由於對密碼要進行加密,並且不期望被外界呼叫,所以,將密碼設定為私有屬性,利用@property和@password.setter設定兩發方法為屬性,以便外界呼叫(加密後,非明文)

class

user

(db.model)

: __tablename__ =

'user'

id= db.column(db.integer, primary_key=

true

) username = db.column(db.string(15)

, nullable=

false

) _password = db.column(db.string(

128)

)# 設定訪問密碼的方法,並用裝飾器@property設定為屬性,呼叫時不用加括號

@property

defpassword

(self)

:return self._password

# 設定加密的方法,傳入密碼,對類屬性進行操作

@password.setter

defpassword

(self, value)

: self._password = generate_password_hash(value)

# 設定驗證密碼的方法

defcheck_password

(self, user_pad)

:return check_password_hash(self._password, user_pad)

上述**實現了主要功能。需要新增使用者時,直接例項化user物件並且傳入引數即可。

完整**如下

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @author: shuaigeek

# @date : 2020/6/25

from flask import flask, render_template, redirect, url_for, request, flash

from flask_sqlalchemy import sqlalchemy

from flask_wtf import flaskform

from werkzeug.security import generate_password_hash, check_password_hash

'sqlalchemy_database_uri']=

'mysql+pymysql://使用者名稱:密碼@127.0.0.1/資料表名'

'sqlalchemy_track_modifications']=

false

'secret_key']=

'geeksecretkey'

class

user

(db.model)

: __tablename__ =

'user'

id= db.column(db.integer, primary_key=

true

) username = db.column(db.string(15)

, nullable=

false

) _password = db.column(db.string(

128)

) @property

defpassword

(self)

:return self._password

@password.setter

defpassword

(self, value)

: self._password = generate_password_hash(value)

defcheck_password

(self, user_pad)

:return check_password_hash(self._password, user_pad)

'/', methods=

['post'

,'get'])

defindex()

:if request.method ==

'post'

: un = request.form[

'username'

] pd = request.form[

'password'

] user = user(username=un, password=pd)

db.session.add(user)

db.session.commit(

)return

'註冊成功'

return

""""""

'/login/'

, methods=

['post'

,'get'])

deflogin()

:if request.method ==

'post'

: name = request.form[

'username'

] pawd = request.form[

'password'

] user = user.query.filter_by(username=name)

.first(

)if user:

if user.check_password(pawd)

:return

'登陸成功'

else

:return

'登陸失敗'

return

'使用者不存在'

return

""""""

if __name__ ==

'__main__'

: db.drop_all(

) db.create_all(

)true

)

python flask 簡單登陸web製作(上)

剛學flask,感覺flask真的很簡潔。然後做了乙個很低階的登陸頁面。就當一次小筆記,希望之後還可以補充。首先要pip install flask配置好flask,然後我用的notepad 來編輯 用git來做版本控制。然後在config.py中新增下面的 class config object ...

登陸mysql s MySQL登陸退出

單例項登陸mysql mysql mysql uroot 適合剛安裝後無密碼 mysql uroot p 標準登陸的方法 mysql uroot p password 密碼明文會洩露密碼,一般用於指令碼中,指令碼許可權root 700 多例項登陸mysql mysql s data 3307 mys...

用事物實現登陸

1.在ado中使用儲存過程 use userdb1 select from t users create proc usp login uname varchar 50 password varchar 50 result bit output 布林型別的引數,是用來返回值的,設定儲存使用者登入是否...