【问题标题】:How to display different todo-list data for different users in flask python如何在flask python中为不同用户显示不同的待办事项列表数据
【发布时间】:2020-04-19 04:06:33
【问题描述】:

假设我正在制作一个待办事项列表网站,我想为不同的用户显示不同的待办事项列表数据。例如,John 将任务添加到他的待办事项列表中,并且只有他可以看到,而其他用户只能在网站上看到他们的待办事项列表数据。一个例子就像 youtube 和 khan academy,它为不同的用户显示不同的内容。我如何在 Flask 中做到这一点?

HTML:


    <div class="content">
    <form action='/todo/' method="POST">
    <input type="text" placeholder="Enter task..." name="content" id="content">
    <input type="submit" value="Add" name="btn">
    </form>
    <br>
    <form action='/todo/' method="POST">
    <input type="submit" value="Back to home" name="btn">
    </form>
    <br>
    <table class="tb">
        <tr>
            <th>Todo</th>
            <th>Date</th>
            <th>Actions</th>
        </tr>
        {% for task in tasks %}
        <tr>
            <td>{{ task.content }}</td>
            <td>{{ task.date_created.date() }}</td>
            <td><a href="/delete/{{task.id}}">Delete</a></td>
        </tr>
        {% endfor %}
    </table>
    </div>

Python:


    from flask import Flask, render_template, url_for, request, redirect, session
    from flask_sqlalchemy import SQLAlchemy
    from datetime import datetime
    from flask_bootstrap import Bootstrap
    from flask_wtf import FlaskForm
    from wtforms import StringField, PasswordField, BooleanField
    from wtforms.validators import InputRequired, Email, Length
    from werkzeug.security import generate_password_hash, check_password_hash
    from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user

    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'Thisissupposetobesecret!'
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
    app.config['SQLALCHEMY_BINDS'] = {'one':'sqlite:///test1.db',
                                    'two':'sqlite:///test2.db',
                                    'three':'sqlite:///test3.db'}
    db = SQLAlchemy(app)
    Bootstrap(app)
    login_manager = LoginManager()
    login_manager.init_app(app)
    login_manager.login_view = 'login'

    class Todo(db.Model):
        __bind_key__ = 'one'
        id = db.Column(db.Integer, primary_key=True)
        content = db.Column(db.String(200), nullable=False)
        completed = db.Column(db.Integer, default=0)
        date_created = db.Column(db.DateTime, default=datetime.utcnow)

        def __repr__(self):
            return '<Task %r>' % self.id

    @app.route('/todo/', methods=["GET", "POST"])
    @login_required
    def todo():
        if request.method == "POST":
            if request.form['btn'] == "Add":
                words = request.form['content']
                new = Todo(content=words)
                db.session.add(new)
                db.session.commit()
                return redirect('/todo/')
            else:
                return redirect('/home/')
        else:
            tasks = Todo.query.order_by(Todo.date_created).all()
            return render_template('todo.html', tasks=tasks)

    if __name__ == "__main__":
        app.run(debug=False)

【问题讨论】:

  • 您有任何代码作为我们的起点吗?
  • 我现在添加了 HTML 和 python 代码。

标签: python-3.x flask flask-sqlalchemy flask-login


【解决方案1】:

您必须有一个用户模型,然后使用烧瓶登录来登录用户。烧瓶登录有教程。然后从烧瓶登录您可以检索当前用户。

此外,在 todo 模型中,您还必须有一列显示哪个用户创建了 jt

【讨论】:

  • 如何保存当前用户的数据?我必须为每个用户创建一个 flask-sqlalchemy 数据库吗?
  • sql 数据库和 sqlalchemy 提供了一个按登录用户的用户名的过滤器。在此处查看一些示例:blog.miguelgrinberg.com/post/…
猜你喜欢
  • 2017-07-04
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 2021-11-20
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多