如何修改此示例以将sha256
字段的username
值用作primary key
而不是autoincremented index
?
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return '<User %r>' % self.username
示例取自此处: http://flask-sqlalchemy.pocoo.org/2.3/quickstart/#a-minimal-application
答案 0 :(得分:0)
有很多方法可以做到这一点,但是最简单的方法就是在您的route.py文件中:
...
from hashlib import sha256
@app.route('/register')
def register():
if form.validate_on_submit():
username_hash = sha256(form.username.data.encode()).hexdigest()
user = User(id=username_hash)
...
如您所见,这有两个部分。用户名通常将是str
,必须被称为encode
才能成为类型bytes
。然后只需从标准库中调用sha256和hexdigest
即可返回哈希值的方法。
具有“唯一”哈希值可能很有用,但是拥有唯一的整数id则不会重复,可以很容易地在行下引用。为了调试和查找flask-shell
中的用户,通过简单的整数而不是其他属性或哈希进行查找可能会更容易。
这可能更简单:
User.query.get(14)
比起使用散列作为主要ID。