Допустим, я создаю веб-сайт списка задач и хочу отображать разные данные списка задач для разных пользователей. Например, Джон добавляет задачу в свой список задач, и только он может видеть ее, в то время как другие пользователи могут видеть только свои данные списка задач на веб-сайте. В качестве примера можно привести YouTube и ханскую академию, где он отображает разный контент для разных пользователей. Как это сделать в 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)