
Flask是个用Python编写地轻量级Web开发框架 ,它被设计成既易于入手 ,又拥有强大地扩展能力 ,能让你从简单地单文件应用开始 ,逐步搭建出结构复杂地网站 ,对于想进入Web开发领域地Python初学者来讲 ,Flask是个很理想地起点 ,本文将带你从零开始 ,借着清晰地步骤和代码示例 ,快速掌握Flask地核心用法。
一、环境搭建与安装
于开始做出编码行为之前,我们是需要率先去搭建好Flask的可供运行的环境的。请务必保证你的电脑之上已然安装了Python(3.7以及比3.7更高的版本)才能行。
有着简单无比安装过程之 Flask,能借助 Python 的包管理工具 pip 来一键达成,开启你的终端(也就是命令提示符或者 PowerShell),输入如下命令。
pip install flask
要经过等待,直至安装告竣之后,我们方可着手去编写首个Flask应用。
二、创建你的第一个 Flask 应用
于你的工作目录里,去创建一个 Python 文件,将其命名为 app.py。
pip install flask
2. 使用任意代码编辑器打开该文件,输入以下代码:
# 导入 Flask 类
from flask import Flask
# 创建 Flask 应用实例
# __name__ 是 Python 预定义变量,被设置为使用当前模块的名称
app = Flask(__name__)
# 使用 route() 装饰器告诉 Flask 哪个 URL 才能触发下面的函数
@app.route('/')
def hello_world():
# 这个函数被称为视图函数,它的返回值将显示在浏览器页面上
return 'Hello, Flask!
'
# 判断是否是直接运行此脚本,如果是,则启动 Flask 内置的开发服务器
if __name__ == '__main__':
app.run(debug=True)
代码解析:
由Flask所构成的代码里的from flask import Flask这部分内容,是用于将框架核心类给导入进来。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, Flask!'
if __name__ == '__main__':
app.run()
实例化一个,被称为 Flask 应用对象 的事物,此乃后续所有操作得以开展的根基所在。
: `@app.route('/')[这是一个路由装饰器]。它把根路径 (`/`) 给与下面的函数 `hello_world` 绑定起来。当用户于浏览器访问你的网站根地址时,服务器便会执行这个函数。`。
仅启动一个简单开发服务器来说,可以运用app.run(debug=True) ,debug=True真是极为实用的参数,在代码发生修改后它能够自动重启服务器,并且在出现错误之际会给出详尽的调试信息。
三、运行应用并查看结果
app.py这个文件被保存之后,于终端里进入到该文件所处的目录,去执行下面这些命令:
python app.py
python app.py
你会看到类似下面的输出,这表示服务器已经成功运行:
* Serving Flask app 'app'
Debug mode: on
Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
将你的浏览器打开,于地址栏把 http://127.0.0.1:5000/ 输入进去,你会看见在浏览器页面当中呈现着大大的 Hello, Flask!。恭喜你呀,你的首个 Web 应用已然运行起来了!
四、进阶功能:动态路由
Web应用常常得依据不一样的URL来展现不一样的内容,Flask给出了动态路由功能,能让你便捷地从URL里获取参数。
调整 app.py,于 app.run()这部分内容的上方位置,增添一个全新的路由:
# ... 之前的代码保持不变
@app.route('/user/')
def show_user_profile(name):
# 这个视图函数接收 URL 中传递的 name 参数
return f'欢迎您,{name}!
'
# ... 后续代码保持不变
现在,若开启了 debug 模式便会自动重启服务器。于浏览器内访问 http://127.0.0.1:5000/user/张三,页面将会显示 欢迎您,张三!。要是把 name 替换成别的名字,页面内容也会跟着动态改变。
@app.route('/user/')
def show_user(username):
return 'Hello, %s!' % username
五、使用模板渲染页面
于 Python 代码里直接去拼接 HTML 字符串,这对维护而言是不太有利的。Flask 当中内置了极为强大的 Jinja2 模板引擎,可以把业务逻辑以及页面展示相互分离开来。
首先,在与 app.py 处于同一级别的目录位置,去创建一个文件夹,这个文件夹的名字是 templates。
到 templates 文件夹里头,搞出一个名为 profile.html 的文件,其内容是这样的:
用户资料页
您好,{{ name }}!
欢迎来到您的专属页面。
首先,把 app.py 修改一番,将 render_template 函数进行导入,随后,把之前的动态路由予以修改。
from flask import Flask, render_template
# ... app 实例化代码不变
@app.route('/user/')
def show_user_profile(name):
# render_template 会去 templates 文件夹寻找 profile.html 文件
# 并将 name 变量的值传递给模板
return render_template('profile.html', name=name)
# ... run 方法不变
Flask Demo Hello, {{ name }}!
This page is rendered by Flask.
再度去访问,http://127.0.0.1:5000/user/李四这个网址,你将会看见一个结构清晰的HTML页面,在这个页面里,{{ name }}已经被替换成了“李四”。
六、实战:处理用户表单
负责对用户提交的数据给予处理,这属于Web开发的核心内容。接下来,我们着手去达成一个简易的登录页面。
from flask import render_template
@app.route('/hello/')
def hello_name(name):
return render_template('index.html', name=name)
针对 app.py 作出相应修改,引入 request 对象,目的在于获取请求数据,并且增添新的路由。
from flask import Flask, render_template, request
# ... app 实例化代码不变
@app.route('/login', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
# 从表单中获取用户名和密码
username = request.form['username']
password = request.form['password']
# 这里只是一个简单的验证示例
if username == 'admin' and password == '123456':
return f'登录成功!欢迎 {username}
'
else:
error = '无效的用户名或密码'
# 如果是 GET 请求,或者登录失败,则显示登录表单
return render_template('login.html', error=error)
# ... run 方法不变
2. 于 templates 文件夹里头,去创建一个 login.html 文件:
用户登录
登录
{% if error %}
{{ error }}
{% endif %}
此刻,前往 http://127.0.0.1:5000/login 进行访问,你会见到一个登录表单。要是输入错误的凭证,就会显示错误信息,而输入正确的用户名 admin 以及密码 123456 的话,便会跳转到登录成功页面。
七、总结
借助本文的引导,我们从毫无基础起步,顺利搭建起了 Flask 开发环境,并且完成了一个拥有动态路由、模板渲染以及表单处理能力的简易 Web 应用。Flask 的核心设计观念是简洁跟灵活,以便让你能够专心于业务逻辑的达成。掌握了这些基础内容,你就已然跨出了运用 Flask 构架强大 Web 应用的第一步。接下来,你能够进一步探究怎样运用 Flask 连接数据库、构建 RESTful API 等更为高级的功能。
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
return 'Username: %s, Password: %s' % (username, password)
else:
return '''

Comments NOTHING