# Import the necessary libraries
from flask import Flask, render_template, request, redirect
# Create a new Flask application
app = Flask(__name__)
# Create a list to store the to-do items
todo_list = []
# Define a custom function to add a new item to the to-do list
def add_item(item):
todo_list.append(item)
# Define a custom function to remove an item from the to-do list
def remove_item(item):
todo_list.remove(item)
# Define a custom function to save the to-do list to a file
def save_list():
with open("todo_list.txt", "w") as file:
for item in todo_list:
file.write(item + "\n")
# Define a custom function to load the to-do list from a file
def load_list():
try:
with open("todo_list.txt", "r") as file:
for line in file:
todo_list.append(line.strip())
except FileNotFoundError:
pass
# Define a custom class to represent a to-do item
class TodoItem:
def __init__(self, description):
self.description = description
def __str__(self):
return self.description
def complete(self):
pass
# Define a custom class to represent a completed to-do item
class CompletedItem(TodoItem):
def __init__(self, description):
super().__init__(description)
def complete(self):
return "Completed: " + self.description
# Define a route for the home page
@app.route("/")
def home():
return render_template("home.html", todo_list=todo_list)
# Define a route for adding a new item to the to-do list
@app.route("/add_item", methods=["POST"])
def add_item_route():
item = request.form["item"]
add_item(item)
save_list()
return redirect("/")
# Define a route for removing an item from the to-do list
@app.route("/remove_item/<item>")
def remove_item_route(item):
remove_item(item)
save_list()
return redirect("/")
# Define a route for marking an item as completed
@app.route("/complete_item/<item>")
def complete_item_route(item):
complete_item = CompletedItem(item)
remove_item(item)
add_item(str(complete_item.complete()))
save_list()
return redirect("/")
# Load the to-do list from the file
load_list()
# Run the Flask application
if __name__ == "__main__":
app.run(debug=True)