python注册系统_Python制作简易注册登录系统
Python制作簡易注冊登錄系統
這篇文章主要為大家詳細介紹了 Python 簡易注冊登錄系統的制作方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
Python 是一種面向對象、解釋型計算機程序設計語言,由 Guido van Rossum 于 1989 年底發明,第一個公開發行版發行于 1991 年。Python 語法簡潔而清晰,具有豐富和強大的類庫。它常被昵稱為膠水語言,它能夠把用其他語言制作的各種模塊(尤其是 C/C++)很輕松地聯結在一起。
這次我主要講解如何用 Python 基于 Flask 的登錄和注冊, 驗證方式采用 Basic Auth
主要用以下庫importos
#Flask的基礎庫
fromflaskimportFlask,abort,request,jsonify,g,url_for
#Flaks的數據庫操作的庫
fromflask.ext.sqlalchemyimportSQLAlchemy
#Flask登錄注冊的庫
fromflask.ext.httpauthimportHTTPBasicAuth
#加密解密密碼的庫
frompasslib.appsimportcustom_app_contextaspwd_context
#URL安全序列化工具
fromitsdangerousimport(TimedJSONwebSignatureSerializer
asSerializer,BadSignature,SignatureExpired)
首先當然是初始化app=Flask(__name__)
# 設置密鑰
app.config['SECRET_KEY']='the quick brown fox jumps over the lazy dog'
# 數據庫的配置
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///db.sqlite'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
#數據庫初始化
db=SQLAlchemy(app)
# 驗證的初始化
auth=HTTPBasicAuth()
然后是建模
SQLAlchemy 是 ORM 模型操作數據庫的,所以是非常的方便
除了基本的屬性之后我們我定義了一些必要的方法classUser(db.Model):
__tablename__='users'
id=db.Column(db.Integer,primary_key=True)
username=db.Column(db.String(32),index=True)
password_hash=db.Column(db.String(64))
# 加密密碼
defhash_password(self,password):
self.password_hash=pwd_context.encrypt(password)
# 驗證密碼
defverify_password(self,password):
returnpwd_context.verify(password,self.password_hash)
# 生成token,并設置過期時間
defgenerate_auth_token(self,expiration=600):
s=Serializer(app.config['SECRET_KEY'],expires_in=expiration)
returns.dumps({'id':self.id})
# 靜態的驗證token的方法
@staticmethod
defverify_auth_token(token):
s=Serializer(app.config['SECRET_KEY'])
try:
data=s.loads(token)
exceptSignatureExpired:
returnNone# token過期
exceptBadSignature:
returnNone# token無效
user=User.query.get(data['id'])
returnuser
注冊功能@app.route('/api/users',methods=['POST'])
defnew_user():
username=request.json.get('username')
password=request.json.get('password')
ifusernameisNoneorpasswordisNone:
abort(400)# 用戶名或者密碼為空
ifUser.query.filter_by(username=username).first()isnotNone:
abort(400)# 用戶已存在
user=User(username=username)
# 加密密碼
user.hash_password(password)
# 保存進數據庫
db.session.add(user)
db.session.commit()
# 成功注冊后返回用戶名,Location后面接著的是跳轉的地址
return(jsonify({'username':user.username}),201,
{'Location':url_for('get_user',id=user.id,_external=True)})
登錄功能# 登錄后獲取token
@app.route('/api/token')
@auth.login_required
defget_auth_token():
# 設置token過期時間
token=g.user.generate_auth_token(600)
returnjsonify({'token':token.decode('ascii'),'duration':600})
獲取 token 后之后,每次請求只需傳 token 就好了
我們可以通過一個方法驗證 token 是否有效# 可以通過token或者賬號密碼登錄
@app.route('/api/resource')
@auth.login_required
defget_resource():
# 如果token有效的話就返回username
returnjsonify({'data':'Hello, %s!'%g.user.username})
細心的人會發現上面這兩個方法前都帶有 @auth.login_required,這其實就是奧妙之處# 有@auth.login_required標志的都要調用這個方法,傳token或者傳賬號和密碼
@auth.verify_password
defverify_password(username_or_token,password):
# 首先驗證token
user=User.verify_auth_token(username_or_token)
ifnotuser:
# 然后再驗證用戶名和密碼
user=User.query.filter_by(username=username_or_token).first()
ifnotuserornotuser.verify_password(password):
returnFalse
g.user=user
returnTrue
最后寫一個入口方法if__name__=='__main__':
# 如果這個數據庫不存在就創建
ifnotos.path.exists('db.sqlite'):
db.create_all()
app.run(debug=True)
這樣就大功告成了
效果圖
注冊
登錄
驗證 token
來源: http://www.phperz.com/article/17/0320/315072.html
總結
以上是生活随笔為你收集整理的python注册系统_Python制作简易注册登录系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis取出list最边的一个_六、R
- 下一篇: websocket python爬虫_p