【Python】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”,表示上传成功。

猜你喜欢

转载自blog.csdn.net/fuhao6363/article/details/130464956