You need to enable JavaScript to run this app. Flask中如何区分首次访问与表单提交场景为日历页设置不同日期逻辑
优惠活动
大模型
产品
解决方案
定价
更多

Flask中如何区分首次访问与表单提交场景为日历页设置不同日期逻辑

Flask日历页面参数重置问题修复方案

后端代码修正

核心调整点:

  • 修正原有代码的缩进错误
  • 引入POST/Redirect/GET(PRG)模式避免表单重复提交
  • 区分首次GET请求和表单提交后的请求,首次访问默认使用最近一周日期
    修正后代码:
from flask import request, redirect, url_for
import datetime as dt
import pandas as pd
import os

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

@app.route('/calendar', methods=['POST','GET'])
def calendar():
    # 首次GET请求默认使用最近一周
    start_date_dt = dt.datetime.now() - dt.timedelta(7)
    end_date_dt = dt.datetime.now()
    
    # POST提交时取用户选择的日期,重定向到GET请求带参数
    if request.method == 'POST':
        start = request.form['start']
        end = request.form['end']
        return redirect(url_for('calendar', start=start, end=end))
    
    # GET请求如果带日期参数就用参数值,否则保留默认值
    if request.args.get('start'):
        start_date_dt = pd.to_datetime(request.args.get('start'))
    if request.args.get('end'):
        end_date_dt = pd.to_datetime(request.args.get('end'))
    
    av_start_date = start_date_dt.strftime('%Y-%m-%d %H:%M')
    av_end_date = end_date_dt.strftime('%Y-%m-%d %H:%M')
    
    df = av_query(av_start_date, av_end_date, '44201')
    # 原有查询和数据处理逻辑保持不变
    
    # 把当前使用的起止日期传给模板,用于表单默认显示
    return render_template('calendar.html', 
                          title='Ozone Data',
                          data_sets=zip(sites,datasets,cmap),
                          sites=sites,
                          current_start=start_date_dt.strftime('%Y-%m-%d'),
                          current_end=end_date_dt.strftime('%Y-%m-%d'))

前端代码修正

核心调整点:

  • 移除不必要的enctype属性(仅上传文件时需要)
  • 给日期输入框设置默认值,显示当前正在使用的日期,新增必填校验避免空提交
    修正后代码:
<form action="{{url_for('calendar')}}" method="post">
  <label for="start">Start:</label>
  <input type="date" id="start" name="start" value="{{ current_start }}" required>
  
  <label for="end">End:</label>
  <input type="date" id="end" name="end" value="{{ current_end }}" required>
  <input type="submit" value="Submit">
</form>

效果说明

  • 用户直接访问mysite.com/calendar时,没有查询参数,默认加载最近一周数据,表单显示对应默认日期
  • 用户提交表单后,会跳转到带日期参数的url,加载所选时间段数据
  • 用户重新在地址栏输入mysite.com/calendar访问时,自动清空参数,回到默认最近一周配置,不会复用上次提交的参数

内容的提问来源于stack exchange,提问作者bart cubrich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 22:21:02