Вызовите другую функцию в зависимости от того, является ли это первым посещением или после отправки формы в колбе?

#python #html #flask

Вопрос:

Я хочу все устроить, так что если ты пойдешь в mysite.com/calendar у is по умолчанию есть «дата начала» и «дата окончания», но затем есть кнопка отправки формы, которая восстанавливает ту же страницу с обновленной датой начала и окончания.

Прямо сейчас это в основном работает, но когда вы вернетесь mysite.com/calendar, он просто отправляет ту же форму, которую вы отправили в последний раз, когда были на сайте. Я хочу сделать сайт таким: когда вы впервые посещаете страницу, даты по умолчанию охватывают последнюю неделю, но затем, когда вы отправляете форму, она перезагружается с выбранным вами периодом времени.

Код Python/Колбы

 from flask import request


import os
SECRET_KEY = os.urandom(32)
app.config['SECRET_KEY'] = SECRET_KEY

@app.route('/calendar', methods=['POST','GET'])
def calendar():
    start_date_dt=dt.datetime.now()-dt.timedelta(7)  #initialize start
    end_date_dt=dt.datetime.now()   #initialize end
        
if request.method == 'POST':
            start_date_dt=pd.to_datetime(request.form['start'])
            end_date_dt=pd.to_datetime(request.form['end'])         
                    
    av_start_date=start_date_dt.strftime('%Y-%m-%d %H:%M') #convert date to query format
    av_end_date=end_date_dt.strftime('%Y-%m-%d %H:%M')
    
    df= av_query(av_start_date,av_end_date,'44201') #perform query next 3 lines

#...do some stuff with query...omitted


    return render_template('calendar.html', title='Ozone Data',data_sets=zip(sites,datasets,cmap),sites=sites)
 

HTML-код

     <form action="{{url_for('calendar')}}" method="post" enctype="multipart/form-data">
      <label for="Start">Start:</label>
      <input type="date" id="start" name="start">
      
      <label for="End">End:</label>
      <input type="date" id="end" name="end">
      <input type="submit" value="Submit">
    </form>
 

Ответ №1:

Вы можете передать даты начала и окончания в value атрибут входных данных даты начала и окончания.

В демонстрационных целях я несколько упростил ваш код маршрута, чтобы сосредоточиться на проблеме в вопросе.

Вы могли бы изменить свой маршрут на что-то вроде этого:

 @app.route("/calendar", methods=["POST", "GET"])
def calendar():
    start_date = dt.datetime.now() - dt.timedelta(7)
    end_date = dt.datetime.now()

    if request.method == "POST":
        start_date = request.form["start"]
        end_date = request.form["end"]

    return render_template("calendar.html", start_date=start_date, end_date=end_date)
 

и ваш шаблон к этому:

 <form action="{{url_for('calendar')}}" method="post" enctype="multipart/form-data">
  <label for="Start">Start:</label>
  <input type="date" id="start" name="start" value={{start_date}}>
  <label for="End">End:</label>
  <input type="date" id="end" name="end" value={{end_date}}>
  <input type="submit" value="Submit">
</form>
 

Если форма разнесена, используется дата из входных данных, в противном случае используется значение по умолчанию.

Если вы хотите, чтобы даты действия формы сохранялись при перезагрузках, вы можете использовать что-то вроде сеанса колбы.