Je travaille sur un projet qui nécessite que l'utilisateur entre une date dans ce gestionnaire de tâches. Cependant, chaque fois que le code est exécuté, la valeur de la colonne d'alarme pour apparaît comme Aucune.

import os
import sched
import time
from flask  import Flask, render_template, url_for, request , redirect, jsonify
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime


app=Flask(__name__)     

app.config['SQLALCHEMY_DATABASE_URI'] ='sqlite:///anothertest.db' #relative path
db = SQLAlchemy(app)

class Todo(db.Model):
    id = db.Column(db.Integer, primary_key=True)    #refrencing id of each entry
    content = db.Column(db.String(50), nullable=True)   #the content that holds
    date_created = db.Column(db.DateTime, default=datetime.utcnow)  #print the date it was made
    alarm = db.Column(db.DateTime)    #stores the alarm

    def __repr__(self):
        return '<Task %r>' % self.id    #every new task made returns its own id


def alarm():
    now = datetime.now()
    alarm = request.args.get('alarm')
    new_alarm = alarm
    if new_alarm:
        if request.args.get('tts') == True:
             run_at = now + timedelta(new_alarm)
             if datetime.now() == run_at - int(3600):
                 hour_left_tts = "You have an hour remaining"
                 tts(hour_left_tts)
             else:
                 return render_template('index.html')
        else:
            run_at = now + timedelta(new_alarm)
            #pop_up = 
    else:
        return render_template('index.html')

@app.route('/',methods=['POST','GET'])      #adding two methods posting and getting
def index():
    if request.method == 'POST':    #submitting form
        task_content = request.form['content'] #create new task from user input
        new_task = Todo(content=task_content) #have the contents = input
        alarm_content = request.form['alarm']
        new_alarm = Todo(alarm=alarm_content)

        try:
            db.session.add(new_task) #add to database 
            db.session.commit()
            return redirect('/') #redirect to input page

        except:
            return 'There was an error'
    else:
        tasks = Todo.query.order_by(Todo.date_created).all() #showing all contents on site
        return render_template('index.html',tasks=tasks)    #user viewing the page
        return alarm_clock()

Bien que je pose également cette question, comment puis-je éventuellement utiliser plusieurs fonctions sur le même itinéraire. Chaque fois que j'essaie d'ajouter de nouvelles fonctions à app.route ('/'), seule celle du haut a la priorité. Merci

0
Karna 6 nov. 2019 à 14:27

1 réponse

Sur cette ligne

new_task = Todo(content=task_content)

Vous créez un objet Todo mais ne définissez que la propriété content.

Et plus tard sur cette ligne

new_alarm = Todo(alarm=alarm_content)

vous créez un nouvel objet Todo avec la propriété alarm.

Cependant, dans le bloc try/catch, vous ajoutez uniquement l'objet new_task qui n'avait que la propriété content. L'objet new_alarm n'est jamais inséré dans la base de données.

Je ne sais pas pourquoi vous créez 2 Todo objets avec des propriétés différentes. Quoi qu'il en soit, je pense que vous ne devez créer qu'un seul Todo objet avec toutes les propriétés que vous souhaitez définir. Un objet sera inséré dans la base de données en une seule ligne.

Donc,

new_todo = Todo(content="<content for the todo>", alarm="<alarm time and date>")

Et puis insérez new_todo dans la base de données.

Pour la deuxième partie de votre question, veuillez comprendre que chaque point de terminaison d'URL est adressé par une fonction.

0
Zeeshan 6 nov. 2019 à 12:06