python开发网页教程
用Python写网页,网页最省事的教程路径是Flask。装完Python后,网页打开终端敲一行 先写个最小的教程能跑的页面。新建一个 保存,运行 但把HTML写在Python字符串里,页面一复杂就乱套。Flask的解决办法是模板。在项目目录下建一个 模板文件里用Jinja2语法接收变量: 这里有个细节值得留意:Jinja2的 路由这块,Flask的写法很直白。比如要做一个用户主页,URL是 尖括号里的 静态文件——CSS、JavaScript、图片——放在 表单处理是绕不开的。一个登录页面,GET请求返回表单,POST请求接收数据: 模板里写 调试模式记得开着。 Flask的扩展生态是它真正好用的地方。要数据库? 最后说个实际感受。用Flask写网页,代码量比想象中少很多。一个带用户登录、数据库读写、模板渲染的小型应用,核心代码两三百行就能搞定。剩下的时间花在HTML和CSS上——那才是用户真正看到的东西。Python在这里的角色很纯粹:接收请求,处理数据,返回响应。就这么简单。pip install flask,教程五秒钟搞定。网页别急着去碰Django,教程那玩意儿是网页给中型以上项目准备的,初学阶段用Flask能让你把注意力放在“请求怎么进来、教程响应怎么出去”这件事上。网页app.py,网页内容就这么几行:from flask import Flask app = Flask(__name__) @app.route('/') def index(): return '<h1>第一个网页</h1><p>用Python跑起来的教程</p>' if __name__ == '__main__': app.run(debug=True) python app.py,网页浏览器打开127.0.0.1:5000,教程页面上就出现你写的网页HTML。这中间没有Apache、没有Nginx,Flask自带的开发服务器全包了。我当初第一次跑通的时候盯着那个页面看了半天——原来后端返回字符串,浏览器就把它当HTML渲染,就这么直接。templates文件夹,里面放index.html。Python代码改成:from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): name = '张三' fruits = ['苹果', '香蕉', '橘子'] return render_template('index.html', name=name, fruits=fruits) <!DOCTYPE html> <html> <head><title>首页</title></head> <body> <h1>你好,{ { name }}</h1> <ul> { % for fruit in fruits %} <li>{ { fruit }}</li> { % endfor %} </ul> </body> </html> { { }}会自动转义HTML标签,防止XSS注入。如果你确实想渲染一段HTML字符串,得用{ { content | safe }}显式声明。这个设计救过不少人——我见过有开发者直接把用户评论塞进模板,没转义,结果页面被注入脚本弹窗。/user/张三,可以这样写:@app.route('/user/<username>') def user_profile(username): return f'这是 { username} 的个人主页' username会自动作为参数传进函数。想限制类型?写成<int:user_id>,访问/user/abc直接返回404。这种把URL模式和函数参数绑定的做法,比手动解析request.args清爽得多。static文件夹里。模板中引用时用{ { url_for('static', filename='style.css') }},Flask会自动生成正确的路径。别小看这个函数,项目部署到子目录时,硬编码的/static/style.css会失效,url_for不会。from flask import request @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] if username == 'admin' and password == '123': return '登录成功' return '用户名或密码错误' return render_template('login.html') <form method="post">,提交后数据就在request.form里。request.form['username']这种取法,如果字段不存在会直接抛400错误。稳妥点用request.form.get('username'),取不到返回None。app.run(debug=True)让Flask在代码改动后自动重启,出错时浏览器里直接显示堆栈信息。但上线时一定要关掉——那个调试器允许在页面上执行任意Python代码,是个巨大的安全漏洞。我见过有人把调试模式开着部署到公网,结果服务器被人当跳板使。pip install flask-sqlalchemy。要用户登录?flask-login。要表单验证?flask-wtf。每个扩展只解决一个问题,你需要什么装什么。不像某些全栈框架,硬塞给你一堆用不上的东西。