python - 使用 Python 和 Flask 的待办事项列表,无法在我的“已完成任务页面”上反映任务
问题描述
我有一个使用 Flask 和 Python 以及 sqlite 后端(SQLAlchemy)制作的 Todo 应用程序。我想知道,如何将“主页”上标记为已完成的任务“移动”到“已完成任务”页面。我是编程新手,我似乎无法理解逻辑
# routes.py
from flask import render_template, flash, redirect, url_for, request
from todo import app, db
from todo.forms import NewtaskForm
from todo.models import Task
@app.route("/")
@app.route("/home", methods=['GET', 'POST'])
def home():
tasks = Task.query.all()
return render_template('home.html', title='home', tasks=tasks)
@app.route("/task/completed", methods=['GET'])
def Completed_tasks():
return render_template('completed-tasks.html', title='Complete tasks')
@app.route("/task/<int:task_id>")
def task(task_id):
task = Task.query.get_or_404(task_id)
return render_template('task.html', title=task.title, task=task)
@app.route("/task/<int:task_id>/completed", methods=['POST'])
def task_complete(task_id):
task = Task.query.get_or_404(task_id)
db.session.commit()
flash('Task has been added', 'success')
return redirect(url_for('Completed_tasks'))
# models.py
from datetime import datetime
from todo import db
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(20), nullable=False)
description = db.Column(db.Text)
date_posted = db.Column(db.DateTime, default=datetime.today().date(), nullable=False)
date_due = db.Column(db.DateTime, nullable=False)
time = db.Column(db.Time, nullable=False)
def __repr__(self):
return "Task('{}', {}, {}, {})".format(self.title, self.date_posted, self.date_due, self.time)
db.create_all()
# Completed-tasks.html (not sure if you'll need this)
{% extends "layout.html" %}
{% block content %}
{% if tasks %}
{% for task in tasks %}
<article class="media content-section">
<div class="media-body">
<div class="article-metadata">
<a class="mr-2" href="#">Posted on - {{ task.date_posted.strftime('%Y-%m-%d') }}</a>
<a class="mr-2" href="#">Due on - {{ task.date_due.strftime('%Y-%m-%d') }}</a>
<a class="mr-2" href="#">Time: {{ task.time.strftime('%H:%M') }}</a>
</div>
<h2><a class="article-title">{{ task.title }}</a></h2>
<p class="article-content">{{ task.description }}</p>
</div>
</article>
{% endfor %}
{% else %}
<h1>Completed Tasks</h1>
{% endif %}
{% endblock content %}
我需要将所选任务从主路由“移动”到 completed_tasks 路由。我已经尝试了一切,它所做的只是将我重定向到一个没有提交任务的空“已完成任务页面”。
解决方案
我能够通过向我的模型添加一个布尔值来使其工作。并使用布尔值过滤主页和已完成页面的数据库。
模型.py
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(20), nullable=False)
description = db.Column(db.Text)
date_posted = db.Column(db.DateTime, default=datetime.today().date())
date_due = db.Column(db.DateTime)
time = db.Column(db.Time)
complete = db.Column(db.Boolean, nullable=False)
def __repr__(self):
return "Task('{}', {})".format(self.title, self.complete)
我根据完整的布尔值过滤了主页和完成的页面
@app.route("/")
@app.route("/home", methods=['GET', 'POST'])
def home():
tasks = Task.query.filter_by(complete = False)
return render_template('home.html', title='home', tasks=tasks)
@app.route("/task/<int:task_id>/completed", methods=['POST'])
def task_complete(task_id):
task = Task.query.get_or_404(task_id)
task.complete = True
db.session.add(task)
db.session.commit()
flash('Your task has been completed', 'success')
return redirect(url_for('Completed_tasks'))
推荐阅读
- c# - 测试搜索结果的方法
Azure.Search.Documents v11.2.0 中的类 - javascript - ES6 导入/导出变量有问题
- powershell - 无法删除自动驾驶仪配置文件,因为它在 intune 中仍处于活动状态(但已在 intune 中删除)
- powershell - PowerShell:为什么 Get-Unique 只返回集合中的第一个对象?
- python-3.x - 从 python 中的不同目录导入模块时遇到问题
- php - Laravel:从模块扩展视图
- java - java连接池和自动提交状态
- c# - 如何为 BackgroundService 的 ExecuteAsync 设置超时?
- google-tag-manager - 无法在 Gmail 插件或 Google 工作区插件中实现 Google 标签管理器
- ios - 来自 instagram 帖子的 Swift/iOS 解析图像