代码之家  ›  专栏  ›  技术社区  ›  NeoVe

从烧瓶改为姜戈

  •  1
  • NeoVe  · 技术社区  · 6 年前

    我有一个烧瓶应用程序的代码:

    def getExchangeRates():
        """ Here we have the function that will retrieve the latest rates from fixer.io """
        rates = []
        response = urlopen('http://data.fixer.io/api/latest?access_key=c2f5070ad78b0748111281f6475c0bdd')
        data = response.read()
        rdata = json.loads(data.decode(), parse_float=float) 
        rates_from_rdata = rdata.get('rates', {})
        for rate_symbol in ['USD', 'GBP', 'HKD', 'AUD', 'JPY', 'SEK', 'NOK']:
            try:
                rates.append(rates_from_rdata[rate_symbol])
            except KeyError:
                logging.warning('rate for {} not found in rdata'.format(rate_symbol)) 
                pass
    
        return rates
    
    @app.route("/" , methods=['GET', 'POST'])
    def index():
        rates = getExchangeRates()   
        return render_template('index.html',**locals()) 
    

    例如, @app.route 装饰用 urls.py 文件,您可以在其中指定路由,但现在,我如何调整 methods=['GET', 'POST'] 排队到Django路?

    我有点困惑,有什么想法吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   willeM_ Van Onsem    6 年前

    但是现在,我如何适应 methods=['GET', 'POST'] 排队到Django路?

    如果您的目标只是防止使用不同的方法(如Put、Patch等)调用视图,那么可以使用 require_http_methods decorator [Django-doc] :

    from django.views.decorators.http import require_http_methods
    
    @require_http_methods(['GET', 'POST'])
    def index(request):
        rates = getExchangeRates()   
        return render_template('index.html',**locals()) 

    如果您想使用它将不同的方法“路由”到不同的函数,可以使用 class-based view [Django-doc] .

        2
  •  4
  •   Alex    6 年前

    如果在Django中使用基于函数的视图,那么不必显式地限制请求类型。

    你只需检查一下 request.method 在你的视野内 if request.method == POST 处理 POST 请求;否则,您将处理 GET 默认情况下请求。

    但是,我强烈建议转到基于类的视图( https://docs.djangoproject.com/en/2.1/topics/class-based-views/ )如果使用Django。他们提供了一个非常好的样板。