很多例程都是基于flask-sqlalchemy的。
但是我使用sqlalchemy,并没有使用sqlalchemy,看中的也就是flask的灵活性。
暂时写flask的程序,但是为了以后写别的程序方便,我选择了更纯粹的ORM,sqlalchemy。
现在整理一个基于sqlalchemy的例程,算是快速入门吧。
from flask import Flask
from flask_security import Security, SQLAlchemySessionUserDatastore, \
UserMixin, RoleMixin, login_required, auth_token_required, http_auth_required
from sqlalchemy import create_engine, Boolean, DateTime, \
Column, Integer, String, ForeignKey
from sqlalchemy.orm import scoped_session, sessionmaker, relationship, backref
from sqlalchemy.ext.declarative import declarative_base
# 创建flask应用
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'super-secret'
app.config['SECURITY_TRACKABLE'] = True
app.config['SECURITY_REGISTERABLE'] = True
app.config['SECURITY_SEND_REGISTER_EMAIL'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///security-dev.sqlite'
app.config['SECURITY_PASSWORD_SALT'] = '951623847'
app.config['SECURITY_PASSWORD_HASH'] = 'sha512_crypt'
# 创建数据库连接
engine = create_engine('sqlite:///test.db', \
convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
# 创建数据库
def init_db():
Base.metadata.create_all(bind=engine)
# 创建模型
class RolesUsers(Base):
__tablename__ = 'roles_users'
id = Column(Integer(), primary_key=True)
user_id = Column('user_id', Integer(), ForeignKey('user.id'))
role_id = Column('role_id', Integer(), ForeignKey('role.id'))
class Role(Base, RoleMixin):
__tablename__ = 'role'
id = Column(Integer(), primary_key=True)
name = Column(String(80), unique=True)
description = Column(String(255))
class User(Base, UserMixin):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
email = Column(String(255), unique=True)
username = Column(String(255))
password = Column(String(255))
last_login_at = Column(DateTime())
current_login_at = Column(DateTime())
last_login_ip = Column(String(100))
current_login_ip = Column(String(100))
login_count = Column(Integer)
active = Column(Boolean())
confirmed_at = Column(DateTime())
roles = relationship('Role', secondary='roles_users',
backref=backref('users', lazy='dynamic'))
# 设置flask-security
user_datastore = SQLAlchemySessionUserDatastore(db_session, User, Role)
security = Security(app, user_datastore)
# 创建测试用户
@app.before_first_request
def create_user():
if not db_session.query(User).first():
init_db()
user_datastore.create_user(email='matt@nobien.net', password='password')
db_session.commit()
# 创建视图
@app.route('/')
@login_required
def home():
return 'you\'re logged in!'
@app.route('/api') #
@http_auth_required
@auth_token_required
def token_protected():
return 'you\'re logged in by Token!'
if __name__ == '__main__':
app.run(host='0.0.0.0',
port=80
转载于:https://www.cnblogs.com/jackadam/p/9549090.html
很多例程都是基于flask-sqlalchemy的。但是我使用sqlalchemy,并没有使用sqlalchemy,看中的也就是flask的灵活性。暂时写flask的程序,但是为了以后写别的程序方便,我选择了更纯粹的ORM,sqlalchemy。现在整理一个基于sqlalchemy的例程,算是快速入门吧。from flask import Flaskfrom...
flask-httpauth 提供了基于装饰器类型的视图函数校验,也可也结合falsk-restful进行接口类的校验,并且提供了两种校验的策略,分别是:
用户名密码校验
flask-httpauth使用者可以通过使用auth.verify_password从写校验函数,然后调用login_required方法使用
案例一:直接使用
记录一下使用flask_security过程中遇到的一些坑。
1、覆盖默认页面(template)
在templates文件夹中创建security文件夹,创建要替换的同名html文件即可。
2、覆盖默认form
创建Form对象,(最好继承自flask_security默认的Form,默认给提供了很多表单验证方法。)在创建Security对象时指明即可,如下...
一、继承 UserMixin 类
Flask 项目可以使用 Flask-Login 插件来实现登录功能,这是一个被广泛使用的优质第三方库。
登录功能设计用户表,我们要使用 Flask-Login 就需要让 User 映射类继承 UserMixin 类。修改 models.py 如下:
from flask_login import UserMixin
class User(Base, UserMixin):
继承 UserMixin 是干嘛呢?我们看下源码,这个类定义在 flask_l
前情提要:由于前后端分离开发涉及到的无状态问题(前端每次请求后端接口都是新建一个会话,很难通过传统的cookie-session方式来实现验证用户登录,存储用户登录状态等功能),所以考虑了前后端传递token的方式对用户的登录状态进行验证。而为了token的安全性(以及实现的方便性),我使用了flask-httpauth这个第三方模块来实现用户token验证的功能。(注意,我这里使用的是此模块的一部分 – HTTPTokenAuth,如果要使用基本认证请左转出门)
但没想到,这是噩梦的开端
初步使用fl.
from flask import Flask
from flask_httpauth import HTTPBasicAuth
from werkzeug . security import generate_password_hash , check_password_hash
app = Flask ( __name__ )
auth = HTTPBasicAuth ()
users
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from flask_security import Security, SQLAlchemyUserDatastore, \
UserMixin, RoleMixin, login_required
# Create ...
Flask-SQLAlchemy是一个基于Flask的Python Web开发框架,用于与SQLAlchemy集成的插件,可以轻松地在Flask应用程序中使用SQLAlchemy进行数据库操作。
以下是使用Flask-SQLAlchemy的基本步骤:
1. 安装Flask-SQLAlchemy
可以使用pip命令安装Flask-SQLAlchemy:
pip install Flask-SQLAlchemy
2. 在Flask应用程序中配置数据库连接
在Flask应用程序中,需要配置数据库连接信息,例如:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/mydatabase'
db = SQLAlchemy(app)
以上代码中,'SQLALCHEMY_DATABASE_URI'是数据库连接的URL,可以根据自己的需要进行配置。在这个例子中,使用的是MySQL数据库。
3. 创建模型
在Flask-SQLAlchemy中,使用模型来表示数据库表。例如:
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
以上代码定义了一个名为“User”的模型,表示一个用户对象,包含id、username和email三个属性。
4. 数据库迁移
在使用Flask-SQLAlchemy时,可以使用Flask-Migrate插件进行数据库迁移。具体的步骤可以参考Flask-Migrate的文档。
5. 数据库操作
使用Flask-SQLAlchemy进行数据库操作非常简单,例如:
# 添加一个用户
user = User(username='john', email='john@example.com')
db.session.add(user)
db.session.commit()
# 查询所有用户
users = User.query.all()
以上代码中,首先创建一个名为“john”的用户,然后将其添加到数据库中并提交。接着,查询所有的用户。
这就是使用Flask-SQLAlchemy的基本步骤,可以根据自己的需要进行配置和使用。