zoukankan      html  css  js  c++  java
  • 登录 获取用户id

    from flask_login import LoginManager

    login_manager=LoginManager()


    def create_app():
      app = Flask(__name__)
      app.config.from_object("setting")
      app.config.from_object("secure")
      app.config['JSON_AS_ASCII'] = False

      #登录插件

      login_manager.init_app(app)
      login_manager.login_view='web.login'   #访问要cookie的url 没有登陆态度要重定向的视图,下面闪现的信息会出现在这个登录页面上
      login_manager.login_message='请先登录或注册'   # 没有身份态访问 提示信息设置  原理,当访问没有权限访问的页面,flask会自动闪现一条文本提示

    return app

    数据库模型

    #coding=utf-8
    from sqlalchemy import Column,Integer,String,Boolean,Float
    from models.base import db
    from werkzeug.security import generate_password_hash,check_password_hash
    from models.base import Base
    from flask_login import UserMixin

    from app import login_manager

    #book模型,传入db核心对象把Book插入db
    class User(UserMixin,Base):    #UserMixin这个类是flask_login里面需要定义的东西,导入后就执行是默认定义
      __tablename__ = 'user'
      id = Column(Integer,primary_key=True)
      nickname = Column(String(24), nullable=False)
      email = Column(String(50), unique=True, nullable=False)


      @property
      def password(self):
        return self._password

      @password.setter
      def password(self,raw):
        self._password=generate_password_hash(raw)

      def check_password(self,raw):
        return check_password_hash(self._password,raw)


      # # 定义用户唯一标示id如果id不是用户唯一标示,这里需要更改,如果id是,那么不需要写
      #def get_id(self):
       # return self.id

    @login_manager.user_loader   #不加这个会写入cookie异常,注意他是一个独立的函数
    def get_user(uid):
      return User.query.get(int(uid))

    视图

    from flask_login import login_user

    @web.route('/login', methods=['GET', 'POST'])
    def login():
      form=LoginForm(request.form)
      if request.method =="POST" and form.validate():
        user= User.query.filter_by(email=form.email.data).first()
        if user and user.check_password(form.password.data):
          login_user(user,remember=True)   #remember为登录态是否要记住,关闭浏览器后还记住为Ture,记住的时间可以在falsk配置文件中设置 默认为365天
          flash("登录成功")
      else:
        flash("账号不存在或密码错误")
      return render_template("auth/login.html",form=form)

    更改登录态记住的时长,在flask配置文件里面增加一个值去设置

    让视图函数 没有登录态不能访问的方法  加上插件的装饰器

    from flask_login import login_required

    @web.route('/my/gifts')
    @login_required
    def my_gifts():
      return "访问成功"

    当访问了没有权限的页面,跳转到登录页面后,用户登录后跳转回原来页面的方法:

    访问没有权限的页面跳转到登录页面 url 自动带上原来访问的uri      http://000:5000/login?next=/mygift  我们获取next后面的uri进行跳转

    @web.route('/login', methods=['GET', 'POST'])
    def login():
      form=LoginForm(request.form)
      if request.method =="POST" and form.validate():
        user= User.query.filter_by(email=form.email.data).first()
        if user or user.check_password(form.password.data):
          login_user(user)
          flash("登录成功")
          next=request.args.get('next')
          if not next and not next.startswith("/"):    #这里加个逻辑uri要/开头的,防止重定向攻击 如别人在后面输出http://baidu.com 别人登录后就跳百度去了
            next=url_for("web.index")
          return redirect(next)

      else:
        flash("账号不存在或密码错误")
        return render_template("auth/login.html",form=form)

    用户登出

    from flask_login import logout_user 

    @web.route('/logout')
    def logout():
      logout_user()  #删除cookie
      return redirect(url_for("web.index"))

    获取当前访问用户的id 写入数据库的方法:

    from flask_login import login_required,current_user

    from flask import current_app
    from app.models.gift import Gift
    from models.base import db

    @web.route('/gifts/book/<isbn>')
    @login_required
    def save_to_gifts(isbn):
      gift = Gift()
      gift.isbn=isbn
      #获取当前用户的id
      gift.uid=current_user.id   #current_user 实际就是 User表的类

      #获取配置文件 BEANS_UPLOAD_ONE_BOOK 数值的方法 参考:https://www.cnblogs.com/kaibindirver/p/12643665.html
      current_user.beans += current_app.config["BEANS_UPLOAD_ONE_BOOK"]    #获取当前这个用户 user表里面的鱼豆 beans,这里去配置文件获取 鱼豆默认变量 2

      db.session.add(gift)
      db.session.commit()
      return "完成"

    判断用户是否登录

    if current_user.is_authenticated:     #登录了返回ture 

    注册视图

    @web.route('/register', methods=['GET', 'POST'])
    def register():
      form=RegisterForm(request.form)
      if request.method =="POST" and form.validate():
        user=User()
        user.set_attrs(form.data)
        db.session.add(user)
        db.session.commit()
        return redirect(url_for("web.login"))

    return render_template("auth/register.html",form=form)

  • 相关阅读:
    objectc 垃圾回收机制
    core date
    core data 中删除一个对象
    cell.accessoryType
    使用core data 框架
    Excel cell format in dynamcis ax 2009
    How to using X++ code to add security checking for go to main table
    Dos命令
    How to fix to report is empty issue
    Hot to catching ClrErrors in Dynamics AX
  • 原文地址:https://www.cnblogs.com/kaibindirver/p/12945501.html
Copyright © 2011-2022 走看看