为什么我必须在Flask create_app中返回应用程序?

时间:2016-06-09 14:58:29

标签: web flask

from flask import Flask, render_template
from flask.ext.bootstrap import Bootstrap
from flask.ext.mail import Mail
from flask.ext.moment import Moment
from flask.ext.sqlalchemy import SQLAlchemy
from config import config

bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy()

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    bootstrap.init_app(app)
    mail.init_app(app)
    moment.init_app(app)
    db.init_app(app)
    # 
    return app

嗨,我通过阅读Grinberg M'的Flask Web Development来学习Flask。 上面的代码是从那本书中复制的。

任何人都可以解释为什么我需要"返回app"到底?

1 个答案:

答案 0 :(得分:1)

据我所知,你还没有复制完整的代码。

你可能错过了这些或类似的东西:

GetStatusRestfulResponse response = restTemplate.getForObject(restRequest.getUrl(), GetStatusRestfulResponse.class,restRequest.getParams());

>org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class GetStatusRestfulResponse] and content type [application/json]
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:108)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:550)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:511)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:248)

RestTemplate restTemplate = new RestTemplate();
    HttpClient httpClient   = HttpClientBuilder.create().setDefaultCredentialsProvider(setupAuthentication(restRequest)).build();
    HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
    requestFactory.setReadTimeout(restRequest.getReqTimeOut());
    restTemplate.setRequestFactory(requestFactory);
    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
response = restTemplate.getForObject(restRequest.getUrl(),     GetStatusRestfulResponse.class,restRequest.getParams());       

正如@davidism所解释的那样,作者返回 app 的原因是我们使用app实例来启动Flask应用程序。就这么简单!

我希望这能回答你的问题。