Python日記 做一套簡易的註冊登入系統

2021-07-22 10:05:41 字數 3526 閱讀 8143

這次我主要講解如何用python基於flask的登入和註冊,驗證方式採用basic auth

主要用以下庫

import os

#flask的基礎庫

from flask import flask, abort, request, jsonify, g, url_for

#flaks的資料庫操作的庫

from flask.ext.sqlalchemy import sqlalchemy

#flask登入註冊的庫

#加密解密密碼的庫

#url安全序列化工具

from itsdangerous import (timedjsonwebsignatureserializer

as serializer, badsignature, signatureexpired)

# 設定金鑰

# 資料庫的配置

#資料庫初始化

# 驗證的初始化

sqlalchemy是orm模型運算元據庫的,所以是非常的方便

除了基本的屬性之後我們我定義了一些必要的方法

class

user

(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):

return pwd_context.verify(password, self.password_hash)

# 生成token,並設定過期時間

defgenerate_auth_token

(self, expiration=600):

return s.dumps()

# 靜態的驗證token的方法

@staticmethod

defverify_auth_token

(token):

try:

data = s.loads(token)

except signatureexpired:

return

none

# token過期

except badsignature:

return

none

# token無效

user = user.query.get(data['id'])

return user

def

new_user

(): username = request.json.get('username')

password = request.json.get('password')

if username is

none

or password is

none:

abort(400) # 使用者名稱或者密碼為空

if user.query.filter_by(username=username).first() is

notnone:

abort(400) # 使用者已存在

user = user(username=username)

# 加密密碼

user.hash_password(password)

# 儲存進資料庫

db.session.add(user)

db.session.commit()

# 成功註冊後返回使用者名稱,location後面接著的是跳轉的位址

return (jsonify(), 201,

)

# 登入後獲取token

@auth.login_required

defget_auth_token

():# 設定token過期時間

token = g.user.generate_auth_token(600)

return jsonify()

獲取token後之後,每次請求只需傳token就好了

# 可以通過token或者賬號密碼登入

@auth.login_required

defget_resource

():# 如果token有效的話就返回username

return jsonify()

細心的人會發現上面這兩個方法前都帶有@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)

ifnot user:

# 然後再驗證使用者名稱和密碼

user = user.query.filter_by(username=username_or_token).first()

ifnot user or

not user.verify_password(password):

return

false

g.user = user

return

true

if __name__ == '__main__':

# 如果這個資料庫不存在就建立

ifnotos.path.exists('db.sqlite'):

db.create_all()

這樣就大功告成了

分享一套 python 試題

賴勇浩 今天在 is better.com 看到一篇 python 面試題集合 同時附在了此文下方 裡面有一些很好的試題,如 python是如何進行型別轉換的?也有一些讓人 的試題,如 python如何實現單例模式?其他23種設計模式python如何實現?在引我思考的同時,也讓我產生把自己之前招聘所...

標題 怎樣將某一套帳中的表轉入另一套帳

在財務軟體的正常的維護中 經常會遇到將某一套帳的某乙個或幾個表轉入另 一套帳中 可以用下面的方法實現 一 在單使用者中,利用 output 和input 轉出 select from lspzk1 output to d lspzk1.txt format ascii 轉入 input into l...

搭建一套簡單的CDN網路

目前對於cdn網路搭建技術有很多成熟的商業方案,對於資金受限的 可能無法自己搭建或購買。這裡提供了一套簡單的實現cdn網路的技術架構,所使用的軟體全部是開源高效且免費的。根據cdn網路技術原理,必須有乙個動態dns伺服器,開源的可以使用bind,免費,而且原 開放。不修改 bind基本上可以實現簡單...