前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用自定义 ORM 下使用 flask-

利用自定义 ORM 下使用 flask-

作者头像
py3study
发布2020-01-17 12:40:24
4040
发布2020-01-17 12:40:24
举报
文章被收录于专栏:python3

1. 安装;

代码语言:javascript
复制
pip install flask_login

2. 使用:

  • 注册应用
代码语言:javascript
复制
import os
from flask_login import LoginManager, current_user

login_manager = LoginManager()
login_manager.login_view = 'users.login'  # 未登录作的跳转视图
login_manager.session_protection = 'strong'  
login_manager.login_message = u"Bonvolu ensaluti por uzi tiun paĝon."  # 设置快闪消息,用于提示用户

app = Flask(__name__) app.secret_key = os.urandom(24) login_manager.init_app(app)
  • 自定义的 User 类需要提供一下属性:
    • is_authenticated : 用来判断是否是已经授权了,如果通过授权就会返回true
    • is_active : 判断是否已经激活,可用
    • is_anonymous : 判断是否是匿名用户
    • get_id() : 返回用户的唯一标识
代码语言:javascript
复制
class UserInfo(Model):
    __tablename__ = "report_user"
    id = Integer('id')
    user_id = BigInt('user_id', primary_key=True)
    union_id = BigInt('union_id')
    name = String('name')
    status = Integer('status', default=1)
    last_login_time = String('last_login_time', default=datetime.now)
    last_update_by = BigInt('last_update_by')
    create_time = Datetime('create_time', default="datetime.now")

    @property
    def is_authenticated(self):
        return self.status == 1

    @property
    def is_anonymous(self):
        return self.status == 2

    @property
    def is_active(self):
        if self.status is None:
            self.rQuery.Select("status").Where('chart_id=%s', [self.group_id])
        return self.status != 0

    def get_id(self):
        return self.user_id

3. 以 cookie 和 session 方式登录

  • 配置: 通过 session 中的信息导入用户实例
代码语言:javascript
复制
@login_manager.user_loader
def load_user(user_id):
    print("user_id =", user_id)
    msg = UserInfo.load_by_user_id(user_id)
    if user:
        user = UserInfo.to_model(msg)
    else:
        print("no found =", msg)
     user = msg
    return user
  • 登录与退出
    • 登录: 通过 login_user(user), 把用户信息设置到 session 中
    • 登出: 通过 logout_user(), 清除此保存在缓冲中的cookie 和 session 中的信息

4. 自定义以请求信息头部或者传递的参数作为键值

  这种情况下,使用 request_loader 回调,与 user_loader 回调原理一样,但是它不是接受user_id

代码语言:javascript
复制
@login_manager.request_loader
def load_user_from_request_by_args(request):

  # 使用 api 参数,或者 post 携带的键值
  union_id = request.args.get('union_id')
  if union_id:
  user = User.query.filter_by(union_id=union_id).first()
  return user
代码语言:javascript
复制
@login_manager.request_loader
def load_user_from_request_by_headers(request):

  # 使用 请求头部 headers 携带的键值
  field = request.headers.get('Authorization')
  if field:
      union_id = field.replace('Basic ', '', 1)
  try:
      union_id = base64.b64decode(union_id)
  except TypeError:
      pass
  user = User.query.filter_by(union_id=union_id).first()
  return user
  • 登录、登出 不需要login_user() 和logout_user()

5. 参考:

  • 官方:http://www.pythondoc.com/flask-login/index.html#authorization-header
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 安装;
  • 2. 使用:
  • 3. 以 cookie 和 session 方式登录
  • 4. 自定义以请求信息头部或者传递的参数作为键值
  • 5. 参考:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档