【发布时间】: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