Flaskapp:全能开发工具

一、开发环境与准备

在使用 Flask 进行Web开发前,首先需要安装 Python 环境。 Python 是非常容易学习的一门编程语言,大量的资料和社区可以支持开发过程中的问题解决。

安装 Flask 可以使用 pip 安装:

pip install Flask

Flask 还需要安装其他插件(extensions)来增强它的功能。例如,Jinja2 用于模板引擎;Werkzeug 用于 HTTP 请求。

pip install Jinja2
pip install Werkzeug

二、路由与视图函数

Flask 的路由系统是其最重要的特性之一,路由系统负责让 Web应用响应 HTTP 请求。Flask 使用路由装饰器指定了一个视图函数来处理请求。

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

这里定义了一个 simple 的路由,用于处理根路径 (“/”) 的请求,这个函数将返回一个字符串响应(”Hello World!”)。现在你可以访问 http://localhost:5000/ 来查看结果了!

三、模板引擎和模板

模板引擎可以极大地提高 Python web 应用的灵活性。 Flask 默认使用 Jinja2 这个流行的模板引擎。模板是一个带有扩展名的文件,其中包含静态文本和特定的动态部分,这些动态部分被称作变量,在使用时需要渲染这些变量。

在 Flask 应用中,可以使用 render_template 函数加载模板文件。下面是一个简单的例子:

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html', title='Homepage')

if __name__ == '__main__':
    app.run()

这个例子定义了一个路由,当访问根路径时,将渲染 index.html 模板。在这个模板中,{{ title }} 是一个变量,可以在渲染时提供它的值。

四、表单

实际 Web 应用很少不涉及任何用户交互,其中表单是最常用、最基本的一种交互方式。在 Flask 中,表单的处理由 WTForms 提供支持。

WTForms 是一个灵活且易于使用的表单处理库,可以处理大多数 Web 应用程序需要的表单处理需求。 Flask-WTF 提供了一个集成到 Flask 应用程序中的 WTForms 扩展。

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField

class NameForm(FlaskForm):
    name = StringField('What is your name?', validators=[DataRequired()])
    submit = SubmitField('Submit')

来看看这个例子。我们新建了一个 NameForm 类,继承与 FlaskForm 类。 StringField 对象表示一个文本字段,SubmitField 对象表示提交按钮。validators 参数是可选的,用于验证输入。

在实际视图函数中处理表单需要用到一些套路,代码如下:

from flask import Flask, render_template, session, redirect, url_for
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)
app.config['SECRET_KEY'] = 'mysecretkey'

class NameForm(FlaskForm):
    name = StringField('What is your name?', validators=[DataRequired()])
    submit = SubmitField('Submit')

@app.route('/', methods=['GET', 'POST'])
def index():
    form = NameForm()

    if form.validate_on_submit():
        session['name'] = form.name.data
        return redirect(url_for('index'))

    return render_template('index.html', form=form, name=session.get('name'))

if __name__ == '__main__':
    app.run()

这个例子定义了一个新的路由,当它被访问时,它会展示一个表单并处理它。 validate_on_submit 方法处理 POST 请求。参数和例子代码的名称相符。如果表单验证通过,将会把 form.name.data 保存到 Flask 的 session 中。最后重定向回根页面(这听起来平庸却是一种常见的技巧,可以保证在刷新页面时,POST 请求不会被重复提交)。

五、数据库

Flask 为不同的数据库(如 MySQL、PostgreSQL 或 SQLite)提供了数据库驱动程序的支持。可以根据需要选择适当的扩展来连接到所需的数据库。

例如:使用 SQLAlchmey(一个 Python 全栈数据工具链)操作 SQLite 数据库的示例代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=False, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f"\<User {self.username}\>"

@app.route('/')
def index():
    db.create_all()

    user = User(username='John', email='john@example.com')
    db.session.add(user)
    db.session.commit()

    return 'Hello, World! The first user is added'

if __name__ == '__main__':
    app.run()

在这个示例中,定义了一个 User 模型,在其中指定了表中各列的详细信息。这个模型继承自 SQLAlchemy 的 Model 类,要指定主键,只需要设置 primary_key=True。我们的数据库地址:sqlite:///database.db,然后程序会自动创建表,并插入一条数据。

六、Docker 化

Docker 是一个应用程序容器引擎,用于轻松的开发、部署和运行虚拟化应用程序。它可以轻松的管理应用程序的依赖性和各种环境。让我们看看如何使用 Docker 部署 Flask 应用程序。

首先,在项目根目录下,创建一个 Dockerfile 文件:

FROM python:3.8-alpine

WORKDIR /app

COPY . .

RUN apk add --no-cache gcc musl-dev linux-headers
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

EXPOSE 5000

ENTRYPOINT ["python", "app.py"]

这个 Dockerfile 安装了 Python 3.8 的 Alpine Linux 版本(一个基于轻量级的 Linux 系统),然后在 /app 目录下复制工程文件。接下来,安装我们的依赖和将程序运行时所需要的依赖包打进一个单独的 tar 包里,以便在任何地方安装这些包。最后,将 5000 端口暴露并指定程序入口点。

最后,使用以下命令可以成功启动 Docker 镜像:

docker build -t flask .
docker run -d -p 5000:5000 flask

运行后访问 http://127.0.0.1:5000 即可。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/242348.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:48
下一篇 2024-12-12 12:48

相关推荐

  • Mac自带Python:你不知道的全能开发工具

    你知道吗?你的Mac自带Python!而且它能够支持开发多种应用程序、执行的任务也很多种多样。让我们一起来探索一下Mac自带Python的神奇功能吧! 一、快速入门 要马上开始使用…

    编程 2025-04-29
  • Anaconda Python – 多面手的全能编程开发工具

    Anaconda Python是一个全能的编程开发工具,它集成了多种Python数据科学和机器学习库以及其他工具。在这篇文章中,我们将从多个方面对Anaconda Python进行…

    编程 2025-04-27
  • Euxqxejs:一款全能编程开发工具

    对于编程开发工程师来说,一款强大的开发工具是必不可少的。Euxqxejs就是一款专为编程开发工程师打造的全能开发工具。本文将从多个方面来详细介绍Euxqxejs的特点和优势。 一、…

    编程 2025-04-27
  • BNFGD:一个全能的编程开发工具

    BNFGD是一个全能的编程开发工具,可以帮助你快速开发软件项目,在不同的应用场景中发挥着不同的作用,下面将从多个方面进行详细阐述。 一、BNFGD的基本功能 在很多软件项目中,我们…

    编程 2025-04-27
  • Python内置的集成开发工具

    Python是一种高级编程语言,广泛应用于Web开发、数据分析、人工智能等领域。Python内置了许多集成开发工具,对于开发人员来说非常方便。本文将从多个方面对Python内置的集…

    编程 2025-04-23
  • Maxcomputer: 多功能编程开发工具

    Maxcomputer是一款全能的编程开发工具,它集成了多种编程语言和开发工具,包括但不限于Java、Python、C/C++、JavaScript、Ruby、PHP等。使用Max…

    编程 2025-04-23
  • guava-java:全能的程序开发工具

    一、简介 Guava是一款由Google开发的Java工具库,提供了一些优秀的、高效的、基于JDK的核心Java库。 Guava-java库的主要特点是它提供了很多高级的操作工具来…

    编程 2025-04-23
  • DelPython:一款全能的Python开发工具

    一、简介 DelPython是一款基于Python语言的开发工具,功能齐全,操作简单,适用于多种开发场景。它能够帮助开发者提高代码开发效率、增加代码可读性,同时还具备功能强大且易于…

    编程 2025-04-23
  • MER5200——一个全能的编程开发工具

    一、简介 MER5200是一个基于C++语言开发的多功能编程工具,它集成了许多常用的开发工具和组件,可以满足你在开发过程中的很多需求。除了传统的编辑器、编译器和调试器等常见的开发工…

    编程 2025-04-22
  • Bugtags开发工具 – 帮你轻松管理和跟踪bug

    一、Bugtags是什么? Bugtags是一个为开发人员打造的bug管理和跟踪工具,它能够帮助开发人员高效地跟踪、收集、整理和解决应用程序中的bug。 二、如何使用Bugtags…

    编程 2025-04-12

发表回复

登录后才能评论