目录
- Python进阶教程:Web开发入门(Flask)
- 一、Flask 简介
- 二、第一个 Flask 应用
- 三、路由与参数
- 四、模板渲染
- 五、处理表单数据
- 六、JSON API
- 七、实战:待办清单 Web 应用
- 总结
Python进阶教程:Web开发入门(Flask)
本文是Python 入门教程系列的第 9 篇。前面介绍了数据分析,本篇介绍用Flask框架快速搭建 Web 应用。
一、Flask 简介
Flask 是 Python 最流行的轻量级 Web 框架:
- 简单:一个文件即可启动 Web 服务
- 灵活:可以自由选择组件
- 生态好:文档丰富,社区庞大
安装:pip install flask
二、第一个 Flask 应用
fromflaskimportFlask app=Flask(__name__)@app.route("/")defhome():return"<h1>Hello, Flask!</h1>"if__name__=="__main__":app.run(debug=True)# 启动,访问 http://127.0.0.1:5000三、路由与参数
fromflaskimportFlask app=Flask(__name__)# 普通路由@app.route("/about")defabout():return"关于页面"# 动态参数@app.route("/user/<name>")defuser(name):returnf"<h1>欢迎,{name}!</h1>"# 指定请求方法@app.route("/login",methods=["GET","POST"])deflogin():return"登录页面"if__name__=="__main__":app.run(debug=True)四、模板渲染
模板让你在 HTML 中嵌入 Python 变量和逻辑(Jinja2 模板引擎):
fromflaskimportFlask,render_template app=Flask(__name__)@app.route("/")defhome():returnrender_template("index.html",title="首页",items=["Python","Flask","Web"])if__name__=="__main__":app.run(debug=True)配套模板文件templates/index.html:
<!DOCTYPEhtml><html><head><title>{{ title }}</title></head><body><h1>{{ title }}</h1><ul>{% for item in items %}<li>{{ item }}</li>{% endfor %}</ul></body></html>五、处理表单数据
fromflaskimportFlask,request app=Flask(__name__)@app.route("/submit",methods=["POST"])defsubmit():name=request.form.get("name")email=request.form.get("email")returnf"收到:{name}({email})"if__name__=="__main__":app.run(debug=True)六、JSON API
现代 Web 应用前后端分离,后端只需返回 JSON:
fromflaskimportFlask,jsonify,request app=Flask(__name__)users=[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]@app.route("/api/users",methods=["GET"])defget_users():returnjsonify(users)@app.route("/api/users",methods=["POST"])defadd_user():data=request.get_json()new_id=max(u["id"]foruinusers)+1users.append({"id":new_id,"name":data.get("name")})returnjsonify(users[-1]),201if__name__=="__main__":app.run(debug=True)七、实战:待办清单 Web 应用
综合运用所学知识,做一个简单的待办清单应用:
fromflaskimportFlask,render_template,request,redirect,url_for app=Flask(__name__)todos=[]# 内存存储,重启会清空@app.route("/")defindex():returnrender_template("todos.html",todos=todos)@app.route("/add",methods=["POST"])defadd():text=request.form.get("text","").strip()iftext:todos.append({"id":len(todos)+1,"text":text,"done":False})returnredirect(url_for("index"))@app.route("/done/<int:todo_id>")defdone(todo_id):fortintodos:ift["id"]==todo_id:t["done"]=Truereturnredirect(url_for("index"))if__name__=="__main__":app.run(debug=True)<!-- templates/todos.html --><!DOCTYPEhtml><html><body><h1>待办清单</h1><formmethod="post"action="/add"><inputtype="text"name="text"placeholder="输入待办事项"><buttontype="submit">添加</button></form><ul>{% for t in todos %}<li>{{ "✅" if t.done else "⬜" }} {{ t.text }} {% if not t.done %}<ahref="/done/{{ t.id }}">完成</a>{% endif %}</li>{% endfor %}</ul></body></html>总结
本篇介绍了 Flask 的路由、模板、表单处理和 JSON API,并用待办清单应用串联实战。下一篇将介绍调试与性能优化,为系列收官,敬请期待!