Flask 快速上手指南:打造高效 Web 应用的第一步
Flask 作为一款轻量级 Web 框架,在 Python 开发者群体中备受青睐,它简洁灵活,易于上手,能帮助开发者快速搭建功能丰富的 Web 应用。本文将依据 Flask 官方快速入门文档,详细介绍 Flask 的核心知识点,助你迅速开启 Flask 开发之旅。
目录
一、搭建基础应用
二、路由与 URL 构建
(一)基本路由
(二)变量规则
(三)URL 构建
三、请求处理
(一)HTTP 方法
(二)获取请求数据
(三)文件上传
四、模板渲染
五、其他重要功能
(一)会话(Sessions)
(二)消息闪现(Message Flashing)
(三)错误处理
一、搭建基础应用
创建一个最小的 Flask 应用只需寥寥数行代码:
from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "Hello, World!
"
上述代码中,首先导入Flask类,创建其对象app,__name__参数用于指示 Flask 查找模板和静态文件的位置。接着,使用@app.route装饰器将根路径/映射到hello_world函数,该函数返回的内容会在浏览器中显示。保存代码为hello.py(注意避免命名冲突),在命令行输入flask --app hello run即可启动应用,访问http://127.0.0.1:5000/便能看到 “Hello, World!” 的页面。若文件名为app.py或wsgi.py,启动时则无需使用--app参数。
二、路由与 URL 构建
(一)基本路由
通过@app.route装饰器,可轻松定义不同的路由规则,将 URL 与处理函数绑定。例如:
@app.route('/') def index(): return 'Index Page' @app.route('/hello') def hello(): return 'Hello, World'
(二)变量规则
在 URL 中添加变量部分,能使应用更具动态性。变量规则通过标记,还可指定参数类型,如。示例如下:
from markupsafe import escape @app.route('/user/') def show_user_profile(username): return f'User {escape(username)}' @app.route('/post/') def show_post(post_id): return f'Post {post_id}'
(三)URL 构建
使用url_for()函数构建 URL,相比硬编码 URL,它具有诸多优势,如描述性强、易于修改、自动处理特殊字符转义、生成绝对路径等。例如:
from flask import url_for @app.route('/') def index(): return 'index' @app.route('/login') def login(): return 'login' @app.route('/user/') def profile(username): return f'{username}\'s profile' with app.test_request_context(): print(url_for('index')) print(url_for('login')) print(url_for('login', next='/')) print(url_for('profile', username='John Doe'))
三、请求处理
(一)HTTP 方法
默认情况下,路由仅响应GET请求。若需处理多种 HTTP 方法,可在@app.route装饰器中通过methods参数指定。如处理登录请求:
from flask import request @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': return do_the_login() else: return show_the_login_form()
(二)获取请求数据
Flask 通过全局的request对象提供客户端发送的数据。可通过request.method获取当前请求方法,使用request.form获取表单数据(POST或PUT请求),request.args获取 URL 参数。示例:
@app.route('/login', methods=['POST', 'GET']) def login(): error = None if request.method == 'POST': if valid_login(request.form['username'], request.form['password']): return log_the_user_in(request.form['username']) else: error = 'Invalid username/password' return render_template('login.html', error=error)
(三)文件上传
处理文件上传时,确保 HTML 表单设置enctype="multipart/form-data"属性。通过request.files访问上传的文件,使用save()方法保存到服务器。例如:
from flask import request from werkzeug.utils import secure_filename @app.route('/upload', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': file = request.files['the_file'] file.save(f"/var/www/uploads/{secure_filename(file.filename)}")
四、模板渲染
Flask 集成了 Jinja2 模板引擎,用于生成各种文本文件,尤其是 HTML 页面。使用render_template()方法渲染模板,模板文件通常存放在templates文件夹中。例如:
from flask import render_template @app.route('/hello/') @app.route('/hello/') def hello(name=None): return render_template('hello.html', person=name)
在模板中,可使用 Jinja2 的强大功能,如条件判断、循环等,还能访问config、request等对象以及url_for()等函数。同时,模板自动开启 HTML 转义,确保应用安全。
五、其他重要功能
(一)会话(Sessions)
session对象用于在不同请求间存储特定用户的信息,基于签名的 cookie 实现。使用前需设置secret_key,示例如下:
from flask import session app.secret_key = b'_5#y2L"F4Q8z\n\xec]/' @app.route('/') def index(): if 'username' in session: return f'Logged in as {session["username"]}' return 'You are not logged in' @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': session['username'] = request.form['username'] return redirect(url_for('index')) return '''
''' @app.route('/logout') def logout(): session.pop('username', None) return redirect(url_for('index'))
(二)消息闪现(Message Flashing)
消息闪现系统用于在请求结束时记录消息,并在后续请求中访问,通常与布局模板结合使用。使用flash()方法记录消息,get_flashed_messages()获取消息。
(三)错误处理
使用abort()函数可提前终止请求并返回错误代码,使用errorhandler()装饰器可自定义错误页面。例如:
from flask import abort, render_template @app.route('/') def index(): return redirect(url_for('login')) @app.route('/login') def login(): abort(401) @app.errorhandler(404) def page_not_found(error): return render_template('page_not_found.html'), 404
Flask 提供了丰富的功能和简洁的开发方式,通过本文介绍的内容,你已掌握了 Flask 开发的基础。后续可深入学习 Flask 扩展、部署等知识,进一步提升开发能力,打造出更强大的 Web 应用。
最后,提供官网学习网站~
Welcome to Flask — Flask Documentation (3.1.x)