当前位置:首页 > 百科

python开发网页教程

用Python写网页,网页最省事的教程路径是Flask。装完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渲染,就这么直接。

但把HTML写在Python字符串里,页面一复杂就乱套。Flask的解决办法是模板。在项目目录下建一个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) 

模板文件里用Jinja2语法接收变量:

<!DOCTYPE html> <html> <head><title>首页</title></head> <body> <h1>你好,{ {  name }}</h1> <ul> { % for fruit in fruits %} <li>{ {  fruit }}</li> { % endfor %} </ul> </body> </html> 

这里有个细节值得留意:Jinja2的{ { }}会自动转义HTML标签,防止XSS注入。如果你确实想渲染一段HTML字符串,得用{ { content | safe }}显式声明。这个设计救过不少人——我见过有开发者直接把用户评论塞进模板,没转义,结果页面被注入脚本弹窗。

路由这块,Flask的写法很直白。比如要做一个用户主页,URL是/user/张三,可以这样写:

@app.route('/user/<username>') def user_profile(username): return f'这是 { username} 的个人主页' 

尖括号里的username会自动作为参数传进函数。想限制类型?写成<int:user_id>,访问/user/abc直接返回404。这种把URL模式和函数参数绑定的做法,比手动解析request.args清爽得多。

静态文件——CSS、JavaScript、图片——放在static文件夹里。模板中引用时用{ { url_for('static', filename='style.css') }},Flask会自动生成正确的路径。别小看这个函数,项目部署到子目录时,硬编码的/static/style.css会失效,url_for不会。

表单处理是绕不开的。一个登录页面,GET请求返回表单,POST请求接收数据:

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代码,是个巨大的安全漏洞。我见过有人把调试模式开着部署到公网,结果服务器被人当跳板使。

Flask的扩展生态是它真正好用的地方。要数据库?pip install flask-sqlalchemy。要用户登录?flask-login。要表单验证?flask-wtf。每个扩展只解决一个问题,你需要什么装什么。不像某些全栈框架,硬塞给你一堆用不上的东西。

最后说个实际感受。用Flask写网页,代码量比想象中少很多。一个带用户登录、数据库读写、模板渲染的小型应用,核心代码两三百行就能搞定。剩下的时间花在HTML和CSS上——那才是用户真正看到的东西。Python在这里的角色很纯粹:接收请求,处理数据,返回响应。就这么简单。

分享到: