【Python】flask框架学习 flask框架的基本使用
flask框架学习
flask框架是什么?
Flask 是一个轻量级的 Web 框架,用于构建 Web 应用程序。它基于 Python 编程语言和 Werkzeug 工具包,提供了简单易用的 API,可以轻松地创建 RESTful API 和 Web 应用程序。
flask的特点
- 轻量级:Flask 框架非常轻量级,代码库小巧,易于学习和使用。
- 灵活:Flask 提供了许多插件和扩展,可以根据需要灵活地构建 Web 应用程序。
- 易扩展:Flask 框架易于扩展,可以添加许多自定义功能。
- 模板引擎:Flask 提供了 Jinja2 模板引擎,可以轻松地构建动态页面。
- ORM:Flask 提供了 SQLAlchemy ORM,可以轻松地与数据库进行交互。
- RESTful API:Flask 框架提供了 Flask-RESTful 扩展,可以轻松地构建 RESTful API。
- 插件机制:Flask 提供了丰富的插件机制,可以根据需要添加自定义功能。
flask框架的优点
- 简单易用:Flask 框架简单易用,学习成本低,适合快速构建 Web 应用程序。
- 灵活性强:Flask 提供了许多扩展和插件,可以根据需要灵活地构建 Web 应用程序。
- 易于扩展:Flask 框架易于扩展,可以添加许多自定义功能。
- 模板引擎强大:Flask 提供了 Jinja2 模板引擎,可以轻松地构建动态页面。
- ORM 强大:Flask 提供了 SQLAlchemy ORM,可以轻松地与数据库进行交互。
- 支持 RESTful API:Flask 框架提供了 Flask-RESTful 扩展,可以轻松地构建 RESTful API。
- 插件丰富:Flask 提供了丰富的插件机制,可以根据需要添加自定义功能。
总之,Flask 框架是一个轻量级、灵活、易扩展、模板引擎强大、ORM 强大、支持 RESTful API 和丰富的插件机制的 Web 框架,可以帮助开发者快速地构建高质量的 Web 应用程序。
flask框架的基本使用
flask框架可以轻松的构建最基础的服务器程序,只需要运行以下代码:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "hello world"
if __name__ == '__main__':
app.run(debug=True)
该段代码首先导入了flask库中的 Flask类,该类的实例将会成为我们的 WSGI 应用,app就是实例化出来的应用,再使用装饰类使该web应用处理请求信息为"/"的请求。
运行结果:
打开给出的链接:
会发现在该url下页面返回hello world的字符串,说明最简单的flask框架的web应用以及搭建完成。
注意:127.0.0.1 以及0.0.0.0 是本地地址,5000是端口号
路由、变量、及url规则
路由
路由是指在 Web 应用程序中跳转到的页面或 URL。在 Flask 中,路由是使用 route() 函数定义的。
比如如下代码:
from flask import Flask
app = Flask(__name__)
# 路由
@app.route('/')
def index():
return "hello world!"
@app.route('/hello/<name>')
def home(name):
return "hello " + name
@app.route('/blg/<int:postID>')
def postid(postID):
return postID
if __name__ == '__main__':
app.run()
如果访问5000端口的根目录:
如果访问hello/xiaoming:
变量
变量是在路由中使用的一种特殊的数据。它们可以在路由的参数中传递给视图函数。Flask 框架中有几种变量类型,包括:
- request:用于处理客户端请求的对象。
- session:用于存储会话数据的对象。
- route:用于标识特定路由的变量。
要在 Flask 路由中使用变量,只需将它们放在变量字符串中,并在视图函数中引用它们。例如,要在 URL 中定义一个名为 /users/ 的变量,可以使用以下代码:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/users/<name>')
def users(name):
return render_template('users.html', users=[name])
上面的代码首先导入 Flask 库,创建一个应用程序实例,并在 app.route() 函数中定义了一个名为 /users/ 的变量。这个变量有一个名为 name 的变量。在 users.html 模板中,可以使用 {{ name }} 来引用这个变量。
URL 规则
URL 规则是指在 URL 中使用的一些特殊字符。它们可以用来指定请求的处理方式,例如:
- /users:处理所有 URL 以 /users 开头的请求。
- /users/:处理所有 URL 以 /users/ 开头的请求。
- /users//:处理所有 URL 以 /users// 开头的请求。
要在 Flask 路由中使用 URL 规则,只需在路由的参数中使用相应的前缀和后缀。例如,要在 URL 中定义一个名为 /users// 的变量,可以使用以下代码:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/users/<name>/<sub-path>')
def users(name, sub_path):
return render_template('users.html', users=[name], sub_path=sub_path)
上面的代码首先导入 Flask 库,创建一个应用程序实例,并在 app.route() 函数中定义了一个名为 /users/ < name >/ < sub-path> 的变量。这个变量有一个名为 name 的变量和一个名为 sub_path 的变量。在 users.html 模板中,可以使用 {{ sub_path }} 来引用这个变量。注意,要使用不同的变量类型和路由参数来区分不同的请求。
flask的模板
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True,threaded=True)
运行这段代码,服务器就会从该文件中平级的templates目录下寻找index.html文件,并且把它显示在页面中。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<h1>Nihao</h1>
</body>
</html>
这是index.html
运行结果:
Flask.render_template 是 Flask 中用于渲染模板的核心函数。该函数接收一个模板字符串作为参数,并将其渲染为HTML。
以下是 Flask.render_template 的基本用法:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html', name='World')
@app.route('/hello')
def hello():
name = 'John'
return render_template('hello.html', name=name)
我们定义了两个路由函数 index 和 hello,它们都接收一个模板字符串作为参数。在 index 函数中,我们将 name 变量设置为 ‘World’,并将其作为参数传递给 render_template 函数来渲染模板。在 hello 函数中,我们将 name 变量设置为 ‘John’,并将其作为参数传递给 render_template 函数来渲染模板。
当我们运行 Flask 应用程序时,它将加载 index.html 和 hello.html 模板,并将它们渲染为相应的HTML。
在渲染模板时,Flask 会将变量插入到模板字符串中,并将其作为参数传递给 render_template 函数。在模板渲染时,Flask 会将这些变量作为参数插入到HTML中,并返回生成的HTML字符串。
静态文件、重定向和错误
在 Flask 中,静态文件、重定向和错误处理是非常重要的概念,它们在应用程序的正常运行中起着至关重要的作用。下面将详细讨论它们在 Flask 中的实现及应用场景。
- 静态文件
静态文件是存储在服务器上的文件,通常用于存储数据和资源。在 Flask 中,静态文件通常用于存储应用程序的配置信息、日志、样式表等。
要使用静态文件,需要在 Flask 应用程序中创建一个文件夹来存储静态文件。然后,在应用程序的主文件中,使用 url_for() 函数来引用静态文件。例如:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html', name='World')
if __name__ == '__main__':
# 创建静态文件夹
app.config['UPLOAD_FOLDER'] = 'static'
# 引用静态文件
static_folder = '../static'
app.url_for('static', filename=static_folder)
在这段代码中,我们在应用程序的主文件夹中创建了一个名为 static 的文件夹,然后在应用程序的 index 函数中使用 url_for() 函数来引用该静态文件。这样,在应用程序运行时,静态文件就会被自动加载并显示在浏览器中。
- 重定向
重定向是指将用户重定向到另一个位置的过程。在 Flask 中,重定向主要分为两种类型:①静态重定向(URL redir):将用户重定向到另一个静态文件夹;②动态重定向(URL redirect):将用户重定向到另一个页面。
对于静态重定向,只需在静态文件夹中创建相应的文件即可。而对于动态重定向,则需要使用 Flask 路由器来实现。以下是一个动态重定向的示例:
from flask import Flask, render_template, redirect, url_for, request, send_from_directory
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'static'
@app.route('/users', methods=['GET', 'POST'])
def users():
if request.method == 'POST':
# 获取新用户信息并进行处理
new_user = request.form['new_user']
# 进行重定向操作
url = url_for('user', username=new_user)
return redirect(url)
else:
# 显示列表页面
return render_template('users.html')
cookies及会话
在 Flask 框架中,cookies 和 session 是用来存储和管理用户数据的。
cookies 是一种常见的用户数据存储方式,通常用于在用户会话中存储一些简单的数据,如用户的偏好设置、登录状态等。Flask 默认使用 SessionCookieJar 来管理 cookies。
当用户在浏览器中访问一个 Flask 应用时,浏览器会将 cookies 存储在本地计算机上。当用户关闭浏览器并重新打开时,浏览器会将 cookies 重新加载到用户的计算机中,以便用户能够访问之前保存的数据。
要在 Flask 中使用 cookies,你需要在路由处理程序中添加 secret_key 参数,这个参数用于指定 cookie 的安全密钥。
from flask import Flask, render_template, request, redirect,session
app = Flask(__name__)
app.secret_key = 'my_secret_key'
@app.route('/')
def index():
return render_template('index.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
# 获取用户输入的用户名和密码
username = request.form['username']
password = request.form['password']
# 在数据库中添加登录记录
if username == 'my_username' and password == 'my_password':
session['username'] = username
return redirect('/')
else:
return render_template('login.html', error='Invalid username or password')
return render_template('index.html')
if __name__ == '__main__':
app.run()
我们在 /login 路由处理程序中使用了 secret_key 参数来指定 cookie 的安全密钥。这样,当用户重新访问应用时,浏览器会将 cookie 重新加载到用户的计算机中,以便用户能够访问之前保存的数据。
另外,Flask 还提供了会话(session)的概念,用于在用户会话中存储更复杂的数据,如用户的偏好设置、登录状态等。会话通常是通过在服务器端存储数据来实现的,而不是在客户端存储数据。
会话
在 Flask 中,会话是通过使用 Flask-Session 模块来实现的。要在 Flask 中使用会话,你需要在路由处理程序中添加 secret_key 参数,这个参数用于指定会话的安全密钥。
from flask import Flask, render_template, request, redirect, url_for
from flask_session import Session
app = Flask(__name__)
app.secret_key = 'my_secret_key'
@app.route('/')
def index():
return render_template('index.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
# 获取用户输入的用户名和密码
username = request.form['username']
password = request.form['password']
# 在数据库中添加登录记录
if username == 'my_username' and password
消息闪现
Flask 框架中的消息闪现(Flash)是一种用于在 Web 应用程序中显示简短提示信息的技术。当用户与应用程序交互时,如果有一些非常重要的信息需要立即告知用户,则可以使用 Flash。
要使用 Flask Flash,你需要在视图函数中使用 flash 参数来存储需要显示的提示信息。然后,在提示信息显示之前,使用 flash.get() 方法来检查是否已经显示了提示信息。如果提示信息已经存在,则将其替换为新的提示信息;否则,将提示信息添加到 Flash 对象中。
from flask import Flask, flash
app = Flask(__name__)
@app.route('/')
def index():
flash('This is a flash message!')
return 'Hello, World!'
这就是一段消息闪现的代码,当用户与应用程序交互时,flash 对象中存储的提示信息将被显示。在这种情况下,提示信息是“This is a flash message!”。在用户与应用程序交互后,flash 对象中的提示信息将被自动删除。
文件上传
在 Flask 中处理文件上传非常简单。它需要一个 HTML 表单,其 enctype 属性设置为“multipart/form-data”,将文件发布到 URL。
URL 处理程序从 request.files[] 对象中提取文件,并将其保存到所需的位置。每个上传的文件首先会保存在服务器上的临时位置,然后将其实际保存到它的最终位置。目标文件的名称可以是硬编码的,也可以从 request.files[file] 对象的 filename 属性中获取。
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload_file():
# 检查是否有文件被上传
if 'file' not in request.files:
return jsonify({'error': 'No file uploaded.'}), 400
file = request.files['file']
# 安全保存文件到磁盘
file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
return jsonify({'success': True}), 200
当用户上传文件时,request.files[‘file’] 对象将被创建并保存到指定的文件路径中。然后,文件将被安全地保存到服务器上的指定位置。最后,响应将包含一个成功的消息,其中包含一个键值“success”,表示上传成功。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)