Flask URL中的日期

时间:2015-07-28 07:23:05

标签: python flask

是否有正确的方法将日期传递(例如,' 2015-07-28')作为烧瓶中的url参数,例如整数:

//as soon as you create $scope.campaign, copy it to $scope.original
$scope.original = angular.copy($scope.campaign);

//in your update function
$scope.updates = _.pick($scope.campaign, function(value, key, object){ return $scope.campaign[key] != $scope.original[key] });

Campaign.update({id: $scope.campaign.id}, $scope.updates).$promise.then(function () {
        // success
    }, function () {
        //error
    });

我需要类似的东西:

@app.route("/product/<int:product_id>", methods=['GET', 'POST'])

3 个答案:

答案 0 :(得分:12)

不是开箱即用的,但您可以注册自己的custom converter

from datetime import datetime
from werkzeug.routing import BaseConverter, ValidationError


class DateConverter(BaseConverter):
    """Extracts a ISO8601 date from the path and validates it."""

    regex = r'\d{4}-\d{2}-\d{2}'

    def to_python(self, value):
        try:
            return datetime.strptime(value, '%Y-%m-%d').date()
        except ValueError:
            raise ValidationError()

    def to_url(self, value):
        return value.strftime('%Y-%m-%d')


app.url_map.converters['date'] = DateConverter

使用自定义转换器有两个好处:

  • 您现在可以使用url_for()轻松构建网址;只需传入该参数的datedatetime对象:

    url_for('news', selected_date=date.today())
    
  • 格式错误的日期导致网址为404;例如/news/2015-02-29不是有效日期(今年2月29日没有),因此路线不会匹配,而Flask会返回NotFound响应。

答案 1 :(得分:2)

一个适合我的简单例子:

@app.route('/news/<selected_date>', methods=['GET'])
def my_view(selected_date):

    selected_date = datetime.strptime(selected_date, "%Y-%m-%d").date()

答案 2 :(得分:-1)

在这种情况下有效,因为日期格式中没有斜杠。否则,它将被视为URL的一部分。