基于 oracle 的 flask 项目(二)——用户登录
flask 相对于很多国企的 oracle 数据库而言,是比较新的,因此很多古老的设计并不一定适合较新的 flask 的标准,但作为后来者,你得向前兼容,你得适应需求。 项目描述绝对大多数的网站需要管理功能的,这个功能是不对外开放,需要有权限的用户登录后才能操作的。这个登录功能对于大牛来说,肯定是操作 session, cookies 了,其实不必这么麻烦, flask-login 插件可以解决你的登录问题,但是要注意一些小细节,本章内容就是来讨论一些细节内容。
创建登录模板
使用数据库及映射类使用数据库及映射类的时候,需要用到 sqlalchemy 第三方库, flask 也提供了一个封装好的插件 flask-sqlalchemy ,拿来使用即可。但是要使用 sqlalchemy, 在创建映射类的时候,必须得设置主键。但是很多前辈的 DBA 们的眼里可是没有 flask 的概念的,很多表是没有设置主键的,我们该怎么办? 答:先对 DBA 管理员翻个白眼,然后自己默默的做事吧。还能怎么办呢!!! 还好,我的项目中的数据库还是有主键的,无需在映射类种,建立虚假的主键。 内容不在赘述,请参加代码。 设置 flask-login初始化 flask-login在 login_manager = LoginManager() login_manager.session_protection = 'strong' # 可以设置None,'basic','strong' 以提供不同的安全等级,一般设置strong,如果发现异常会登出用户。 login_manager.login_view = 'show.login' # 这里填写你的登陆界面的路由 def create_app(config_name): """ 使用工厂函数初始化程序实例""" .... login_manager.init_app(app=app) 很多时候,我们会遇到 remember_me 无效的情况,请将 详细设置请看程序注释及[源代码02]()。 配置 flask-login让 class OusiStaff(UserMixin,db.Model): __tablename__ = 'ousi_staff' sid = db.Column(db.Integer,primary_key=True) department = db.Column(db.String(8)) name = db.Column(db.String(8)) password = db.Column(db.String(8)) phone = db.Column(db.String(11)) role = db.Column(db.String(8)) def is_admin(self): # 自行定义的方法,用于权限判断 return self.role == 'admin' class AnonymousUser(AnonymousUserMixin): ''' 继承至该类的用户模型 将作为未登陆时的用户模型,可以保持代码的一致性。 ''' def is_admin(self): # 自行定义的方法,用于权限判断 return False login_manager.anonymous_user = AnonymousUser 实现用户的回调函数也是在 @login_manager.user_loader def load_user(user_id): return OusiStaff.query.get(int(user_id)) 此处,不详细讲解,仅仅是实现了一个回调用户的函数。 使用登录权限限制既然使用了登录功能,那么肯定是有些内容不能让未登录的用户观看,这就需要在试图函数定义的时候加上一个 login_required 装饰器了。 这个功能的实现很简单,在 ... from flask_login import login_required,login_user,logout_user ... @show.route('/',methods = ['GET','POST']) @show.route('/index','POST']) @login_required def index(): return render_template('show/index.html') 至此,你可以测试自己的项目了。 问题报
|