首页 > 解决方案 > 烧瓶登录管理器和 PyMongo

问题描述

这是我在这里的第一篇文章,很高兴我到达,因为这段代码正在激发我的精神能量,同样享受它:) 所以我正在尝试使用 PyMongo 和 flash-login、LoginManager 构建博客项目,但它刚刚返回错误。我正在关注 Miguel Grinbergs 精彩博客视频中的代码。几天来,我一直在摸不着头脑,非常感谢您的意见。谢谢,周五快乐

import os
import env
import model
from model import User
from flask_login import LoginManager, current_user, login_user
from flask import Flask, render_template, url_for, flash, redirect
from flask_pymongo import PyMongo
from forms import LoginForm
from werkzeug.security import generate_password_hash, check_password_hash


app = Flask(__name__)


# SSSSHHHH
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY')
app.config["MONGO_URI"] = os.environ.get("MONGO_URI")


mongo = PyMongo(app)
login = LoginManager(app)


@app.route('/')
def base():
    return render_template('base.html')


@app.route('/index')
def home():
    return render_template('index.html', title='Home')


@app.route('/login', methods=['GET', 'POST'])
def login():
    if current_user.is_authenticated:
        return redirect(url_for('index'))
    form = LoginForm()

    # IF ITS RIGHT THE FIRST TIME
    if form.validate_on_submit():
        user = User.mongo.db.find_one(username=form.username.data).first_or_404()
        if user is None or not user.check_password(form.password.data):
            flash(f'Invalid username or password')
            return redirect(url_for('home'))
            #flash('Login success for user {}, remember_me{}'.format(
            #form.username.data, form.remember_me.data))
        login_user(user, remember=form.remember_me.data)
        return redirect(url_for('home'))
    return render_template('login.html', title='Log In', form=form)


if __name__ == '__main__':
            app.run(host=os.environ.get('IP'),
            port=int(os.environ.get('PORT')),
            debug=True)
import os
from mini import login
from flask_login import UserMixin, User


@login.user_loader
def load_user(_id):
    return User.mongo.db.find(toInt(_id))


class User(UserMixin, db.Document):

    _id = ObjectId (primary_key=True)
    username = StringField (unique=True)
    email = StringField (unique=True)
    password = StringField (default=True)

    # REPR TELLS PYTHON HOW TO DEAL WITH OBJECTS OF THIS. CLASS
    def __repr__(self):
        return '<User {}>'.format(self.username)

标签: pythonmongodbmodulepymongoflask-login

解决方案


推荐阅读