Python Flask入门到精通:详细教程和实战案例

前言

Flask是一个轻量级的Web框架,用于快速开发Web应用程序。它的设计理念是简洁、灵活和易于扩展,非常适合于从简单的单页应用到复杂的大型项目。通过Flask,可以创建各种Web应用程序,比如博客、电子商务网站、RESTful API等。

保姆级别 项目体验 Demo 地址:
https://github.com/couragesteak/flask_frame_demo

1 安裝

1.1 Flask

python 复制代码
Flask==3.0.2
Flask-Cors==4.0.1

测试环境 Python3.10.9

1.2 MySQL 数据库

ubuntu

powershell 复制代码
sudo apt-get install libmysqlclient-dev

centos

powershell 复制代码
yum install -y mysql-devel gcc gcc-devel python-devel
powershell 复制代码
pip install flask-mysqldb -i https://pypi.douban.com/simple

否则报错 没有包 MySqldb

2 基础案例 与 蓝图

原创:有勇气的牛排

https://www.couragesteak.com/article/457

2.1 蓝图

蓝图(Blueprint)是一个用于组织和管理应用程序的强大工具。它可以使程序拆分的更小、更模块化,从而提高代码的可扩展性。

  • 模块化开发
  • 提高代码复用
  • 简化路由管理,不至于过于庞大
  • 团队协作,不同人维护不同块

2.2 案例

main.py

python 复制代码
from flask import Flask
from flask import render_template
from flask import request
from flask_cors import CORS
import os

app = Flask(
    __name__,
    template_folder='template', # 定义html文件位置
    static_url_path='/',		# 定义静态资源路由路径
    static_folder='resource'    # 定义静态资源文件夹
)

# app.config['SECRET_KEY'] = os.urandom(24)  # 生成随机数种子,用于产生SessionID
app.secret_key = os.urandom(24)  # 用于加密会话数据

# 允许跨域请求
CORS(app, supports_credentials=True)

# 导入蓝图
from src.main.controller.index import index
app.register_blueprint(index)


# 定义全局拦截器,实现自动登录
@app.before_request
def before():
    url = request.path
    print(url)

    # 路由 白名单
    pass_list = [
        '/', '/login', '/logout', 
        '/vcode', '/ecode', '/register'
    ]

    if url in pass_list or url.endswith('.js')
        pass
    else:
        print('路由不在白名单 需要登录')
        username = request.cookies.get('username')
        password = request.cookies.get('password')

        print(username, password)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8081, debug=True)

蓝图 index.py

python 复制代码
from flask import Blueprint, render_template
index = Blueprint('index', __name__)

# http://127.0.0.1:8081
@index.route('/')
def home():
    res = dict(
        name="有勇氣的牛排"
    )
    return render_template('index.html', result=res)

3 获取参数 GET、POST

python 复制代码
# 参数测试
# http://127.0.0.1:8081/param_test
@m_test.route('/param_test', methods=['GET', 'POST'])
def param_test():
    # 获取当前请求的方法类型
    method = request.method

    data = dict(
        nickname="有勇氣的牛排",
        url="https://www.couragesteak.com/",
    )

    # 根据不同的请求方法获取参数
    if method == 'GET':
        # 从GET请求中获取参数
        id = request.args.get('id', None)
        data['id'] = id
        return render_template('test_param.html', data=data)

    elif method == 'POST':
        # 从POST请求中获取参数
        id = request.form.get('id', None)
        data['id'] = id
    else:
        param = 'No valid method'

    return jsonify(data)

4 重定向

python 复制代码
# 重定向 路由
# http://127.0.0.1:8081/redirect_with_param
@m_test.route('/redirect_with_param')
def redirect_with_param():
    result = dict(
        name="有勇氣的牛排"
    )
    # return redirect(url_for('param_test'))
    return redirect('/')

5 模板

这里使用render_template,也可以使用其他模板,比如 Jinja2

py

python 复制代码
# http://127.0.0.1:8081
@index.route('/')
def home():
    res = dict(
        name="有勇氣的牛排"
    )
    return render_template('index.html', result=res)

html模板

html 复制代码
<div>
    <div>
        <a href="/">首頁</a>
        <a href="/login">登錄</a>
        <a href="/param_test">參數測試</a>
        <a href="/logout">退出登錄</a>
        <a href="/js/jquery-3.4.1.min.js">打開靜態文件</a>
        <a href="/redirect_with_param">重定向測試</a>
    </div>
    首頁: {{ result.name }}
</div>

6 报错路由 404/500

python 复制代码
# 定义404错误页面
@app.errorhandler(404)
def not_found(e):
    return render_template('error_404.html')


# 定义500错误页面
@app.errorhandler(500)
def internal_error():
    return render_template('error_500.html')

详细文档:

https://dormousehole.readthedocs.io/en/latest/quickstart.html

相关推荐
Howrun777几秒前
C++_错误处理
开发语言·c++
步步为营DotNet4 分钟前
深入理解ASP.NET Core Middleware:管道执行机制与高效应用
后端·asp.net
维构lbs智能定位14 分钟前
工厂人员定位(一)融合定位技术如何重构安全生产与效率管理?(含系统架构、技术选型对比、实际应用)
python·物联网·智慧工厂·厂区人员定位系统·工厂人员定位·工厂定位系统
yufuu9814 分钟前
进阶技巧与底层原理
jvm·数据库·python
2301_8174973314 分钟前
使用Flask快速搭建轻量级Web应用
jvm·数据库·python
bubiyoushang88815 分钟前
基于MATLAB的局部特征尺度分解(LCD)实现与优化
开发语言·matlab
hgz071017 分钟前
堆内存分区
java·开发语言·jvm
索荣荣18 分钟前
SpringBoot Starter终极指南:从入门到精通
java·开发语言·springboot
独断万古他化18 分钟前
【Spring 事务】事务隔离级别与事务传播机制:从理论到业务落地实操
java·后端·spring·事务隔离·事务传播
Warren9825 分钟前
Allure 常用装饰器:实战用法 + 最佳实践(接口自动化)
运维·服务器·git·python·单元测试·自动化·pytest