Python Web开发入门:从零搭建你的第一个Flask应用

张开发
2026/4/12 6:13:10 15 分钟阅读

分享文章

Python Web开发入门:从零搭建你的第一个Flask应用
1. 为什么选择Flask作为你的第一个Web框架作为一个刚接触Python Web开发的新手你可能会被各种框架名词绕晕Django、Flask、FastAPI... 我当年第一次看到这些名词时感觉就像走进了一家满是英文菜单的餐厅。经过多年实战我可以负责任地告诉你Flask是最适合入门的Web框架原因很简单轻量级设计Flask核心只有路由和模板渲染两个主要功能安装包不到1MB。相比之下Django自带的20多个组件会让新手望而生畏即插即用就像乐高积木你可以从最简单的应用开始再按需添加数据库、用户认证等功能文档友好Flask官方文档被公认为Python框架中最清晰易懂的每个功能都有完整示例我带的实习生小王上周刚用Flask完成了他的第一个TODO应用。从安装到上线只用了3小时期间我们还抽空喝了杯咖啡。这种快速获得正反馈的体验对保持学习热情至关重要。2. 开发环境配置指南2.1 Python环境搭建别被环境配置吓到其实就三步去Python官网下载最新稳定版目前是3.11安装时务必勾选Add Python to PATH打开终端输入python --version验证提示Windows用户推荐用VS Code作为编辑器Mac用户用PyCharm Community版更顺手2.2 虚拟环境的重要性新手最容易踩的坑就是项目依赖混乱。上周我修复过一个项目因为开发者把几十个包都装到全局环境导致版本冲突。用虚拟环境能完美解决# 创建虚拟环境 python -m venv myenv # 激活环境Windows myenv\Scripts\activate.bat # 激活环境Mac/Linux source myenv/bin/activate激活后终端提示符前会出现(myenv)标记这时所有pip安装的包都会隔离在这个环境中。2.3 安装Flask在激活的虚拟环境中运行pip install flask验证安装是否成功import flask print(flask.__version__) # 应该输出类似2.3.2的版本号3. 你的第一个Flask应用3.1 最小应用结构创建一个app.py文件输入以下代码from flask import Flask app Flask(__name__) app.route(/) def home(): return Hello World! if __name__ __main__: app.run(debugTrue)这段代码做了三件事创建Flask应用实例定义路由/指向home()函数启动开发服务器debugTrue会开启自动重载运行python app.py后访问http://localhost:5000你会看到浏览器显示Hello World!。恭喜你的第一个Web应用上线了3.2 理解路由机制路由就像餐厅的菜单告诉用户哪个URL对应什么内容。试着在app.py添加新路由app.route(/about) def about(): return 这是一个关于页面访问http://localhost:5000/about就能看到新页面。Flask支持动态路由app.route(/user/username) def show_user(username): return f用户: {username}访问/user/张三会显示用户: 张三。这种动态参数在构建用户主页时非常有用。4. 用模板渲染HTML页面4.1 为什么要用模板直接在Python代码里拼接HTML就像用记事本写论文——能实现但效率极低。模板引擎允许我们分离Python逻辑和HTML展示复用页面布局导航栏/页脚等支持条件判断、循环等逻辑Flask默认使用Jinja2模板首先创建templates文件夹名称必须精确。4.2 基础模板示例创建templates/home.html!DOCTYPE html html head title{{ title }}/title /head body h1{{ welcome_msg }}/h1 ul {% for item in menu %} li{{ item }}/li {% endfor %} /ul /body /html修改app.py的视图函数from flask import render_template app.route(/) def home(): return render_template(home.html, title首页, welcome_msg欢迎来到我的网站, menu[主页, 关于, 联系])现在页面会显示带动态列表的完整HTML。{{ }}用于变量替换{% %}用于控制逻辑。4.3 模板继承技巧在templates下创建base.html作为母版!DOCTYPE html html head title{% block title %}{% endblock %}/title /head body nav网站导航栏/nav {% block content %}{% endblock %} footer© 2023 我的网站/footer /body /html其他模板可以继承它{% extends base.html %} {% block title %}关于我们{% endblock %} {% block content %} h1这里是关于页面的具体内容/h1 {% endblock %}这种模式让页面维护变得简单——修改导航栏只需改base.html一处。5. 处理表单数据5.1 基础表单实现创建登录表单templates/login.htmlform methodPOST action/login input typetext nameusername placeholder用户名 required input typepassword namepassword placeholder密码 required button typesubmit登录/button /form在app.py添加处理逻辑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 f欢迎回来{username}! return render_template(login.html)5.2 表单安全注意事项永远使用POST方法提交敏感数据生产环境必须启用CSRF保护Flask-WTF扩展密码等敏感字段要加密存储不要明文存数据库一个真实的教训去年我审计过一个项目开发者把密码直接用GET传参结果被浏览器历史记录泄露。6. 项目结构优化建议当你的应用超过5个路由时就该考虑更好的项目结构了。推荐这样组织myapp/ ├── app.py # 应用入口 ├── config.py # 配置文件 ├── requirements.txt # 依赖列表 ├── static/ # 静态文件 │ ├── css/ │ ├── js/ │ └── images/ └── templates/ # 模板文件 ├── base.html └── pages/使用工厂模式创建应用# app.py def create_app(): app Flask(__name__) # 初始化配置 app.config.from_pyfile(config.py) # 注册路由 app.route(/) def home(): return Hello World! return app if __name__ __main__: app create_app() app.run()这种结构让测试和维护变得更容易也是大型Flask项目的基础。7. 常见问题解决方案7.1 端口被占用怎么办如果看到OSError: [Errno 98] Address already in use说明5000端口被其他程序占用。解决方法if __name__ __main__: app.run(port5001) # 换其他端口或者找出占用端口的进程并关闭# Linux/Mac lsof -i :5000 kill -9 PID # Windows netstat -ano | findstr 5000 taskkill /PID PID /F7.2 修改后页面没更新确保开发服务器正在运行控制台有输出开启了debug模式app.run(debugTrue)保存了所有修改的文件如果还不行尝试手动停止并重启服务器CtrlC后重新运行清除浏览器缓存Chrome按CtrlShiftDel8. 下一步学习建议完成基础应用后你可以逐步添加这些功能数据库集成先用SQLite再用Flask-SQLAlchemy用户认证Flask-Login是不错的入门选择REST APIFlask-RESTful能快速构建API前端增强引入Bootstrap等CSS框架我建议每学完一个功能就立即实践。比如学完数据库章节就给你的应用添加一个留言板功能。真实项目是最好的老师。

更多文章