flask_sqlalchemy使用字符串哈希作为主键

2024-03-29 00:12:38 发布

您现在位置:Python中文网/ 问答频道 /正文

如何修改此示例以使用username字段的sha256值作为primary key,而不是{}?在

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


Tags: keyfromimporttrueappflask示例db
1条回答
网友
1楼 · 发布于 2024-03-29 00:12:38

有很多方法可以做到这一点,但最简单的方法就是在你的routes.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就是返回哈希值的方法。在

拥有一个“unique”散列是很有用的,但是拥有一个惟一的整数id也是很有用的,这个id不会被重复,并且可以很容易地被引用到下一行。为了在flask-shell中调试和查找用户,通过简单整数而不是其他属性或哈希进行查找可能更容易。在

这样做可能更简单:

^{pr2}$

而不是对主id使用哈希

相关问题 更多 >