本文共 3993 字,大约阅读时间需要 13 分钟。
Flask应用程序的配置文件通常存储在settings.py中,主要用于存储应用程序的运行环境和配置参数。以下是settings.py的内容示例:
import datetimeclass Config(object): TESTING = False PROPAGATE_EXCEPTIONS = None PRESERVE_CONTEXT_ON_EXCEPTION = None SECRET_KEY = None PERMANENT_SESSION_LIFETIME = datetime.timedelta(days=31) USE_X_SENDFILE = False SERVER_NAME = None APPLICATION_ROOT = '/' SESSION_COOKIE_NAME = 'session' SESSION_COOKIE_DOMAIN = None SESSION_COOKIE_PATH = None SESSION_COOKIE_HTTPONLY = True SESSION_COOKIE_SECURE = False SESSION_COOKIE_SAMESITE = None SESSION_REFRESH_EACH_REQUEST = True MAX_CONTENT_LENGTH = None SEND_FILE_MAX_AGE_DEFAULT = datetime.timedelta(seconds=43200) TRAP_BAD_REQUEST_ERRORS = None TRAP_HTTP_EXCEPTIONS = False EXPLAIN_TEMPLATE_LOADING = False PREFERRED_URL_SCHEME = 'http' JSON_AS_ASCII = True JSON_SORT_KEYS = True JSONIFY_PRETTYPRINT_REGULAR = False JSONIFY_MIMETYPE = 'application/json' TEMPLATES_AUTO_RELOAD = None MAX_COOKIE_SIZE = 4093class ProductionConfig(Config): DEBUG = Falseclass DevelopmentConfig(Config): DEBUG = True
在 Flask 应用程序中,可以通过 app.config.from_object("settings.DevelopmentConfig") 导入配置文件。以下是具体实现代码:
from flask import Flaskapp = Flask(__name__)app.config.from_object("settings.DevelopmentConfig") Flask 的路由系统基于带参数的装饰器来定义 URL。以下是路由系统的主要特点:
endpoint 参数,默认使用视图函数名称作为别名。/<int:nid>:接收整数类型的 nid 参数。/<nid>:接收字符串类型的 nid 参数。以下是动态路由的示例:
@app.route('/index/ ')def index(nid): return "Index" FBV(Function-Based View)是 Flask 的默认视图模式,通过装饰器来实现权限控制。以下是一个简单的 FBV 示例:
@app.route('/login', methods=['GET', 'POST'])def login(): if request.method == 'POST': user = request.form.get('user') password = request.form.get('password') if user == 'aliang' and password == '007': session['user'] = user return redirect(url_for('index')) return render_template('login.html', error='用户名或密码错误!') return render_template('login.html') 通过 @auth 装饰器实现用户权限控制。以下是一个简单的实现:
@app.route('/index')@authdef index(): return render_template('index.html') Flask 提供了丰富的请求对象,主要包括:
request.method:获取请求方法。request.args:获取 GET 请求参数。request.form:获取 POST 请求参数。request.values:获取所有请求参数。request.cookies:获取请求 cookie。request.headers:获取请求头信息。request.path:获取请求路径。request.url:获取完整 URL。以下是一个示例:
request.method # 获取请求方法request.args # 获取 GET 请求参数request.form # 获取 POST 请求参数request.files # 获取上传文件
Flask 提供了多种返回响应的方式:
直接返回数据:
return "Index"return jsonify({'k1': 'v1'}) 定制响应头和响应体:
response = make_response("Index")response.headers['X-Custom'] = 'Custom Header'return response 设置 cookie:
response.set_cookie('user', 'aliang')return response Flask 的模板渲染与 Python 的语法非常相似,支持多种模板引擎。以下是一个简单的模板渲染示例:
@app.route('/tpl')def tpl(): context = { 'users': ['小明', '小李', '小花'], 'txt': Markup(" ") } return render_template('tpl.html', **context) 通过 @app.template_global() 装饰器可以定义全局模板函数。以下是一个简单的实现:
@app.template_global()def global_template_func(a, b): return a + b
Flask 的 session 会话存储在客户端的 cookie 中,支持临时存储和取回数据。以下是一个简单的使用示例:
@app.route('/page1')def page1(): flash('存储临时数据') return "Session"@app.route('/page2')def page2(): flash_msg = get_flashed_messages() return flash_msg Flask 中间件通过自定义类实现,可以在请求处理过程中添加额外的逻辑。以下是一个简单的中间件实现:
class Middleware(object): def __init__(self, origin_wsgi_app): self.origin_wsgi_app = origin_wsgi_app def __call__(self, *args, **kwargs): ret = self.origin_wsgi_app(*args, **kwargs) return ret
@app.before_request@app.before_request 装饰器可以用来在每个请求之前执行自定义逻辑。以下是一个简单的实现:
@app.before_requestdef auth(): print('请先登录!') @app.after_request@app.after_request 装饰器可以用来在每个请求之后执行自定义逻辑。以下是一个简单的实现:
@app.after_requestdef after(response): print('请求已经得到响应!') return response 通过这些功能,Flask 提供了一个强大而灵活的框架,能够满足各种 Web 应用开发需求。
转载地址:http://eunuz.baihongyu.com/