|
用Python做网页,做网最直接的做网路子不是Django也不是Flask,而是做网标准库里的http.server。打开终端,做网敲下python -m http.server 8000,做网当前目录就成了网站根目录,做网浏览器访问localhost:8000就能看到文件列表。做网这玩意儿简单到离谱,做网但只能用来临时传文件或者本地调试,做网真拿它做正经网站,做网性能和安全都是做网灾难。 我刚开始学的做网时候,以为Python做网页就是做网写个.py文件,里面print("<h1>你好</h1>"),做网然后浏览器打开就完事了。做网实际上浏览器根本不认识Python,它只认HTML、CSS、JavaScript。Python的角色是在服务器上生成这些内容,再通过HTTP协议发给浏览器。所以“用Python做网页”这句话,准确说是“用Python写服务端程序,动态产出网页内容”。 Flask是我最推荐新手碰的框架。装好之后,一个文件就能跑起来: from flask import Flask app = Flask(__name__) @app.route('/') def index(): return '<h1>这是首页</h1><p>用Python生成的</p>' if __name__ == '__main__': app.run(debug=True) 运行后访问127.0.0.1:5000,页面上那行字就是Python拼出来的。路由@app.route('/')决定了哪个URL对应哪个函数。想加个/about页面,再写一个路由就行。这种写法比Django轻太多,Django自带ORM、后台管理、用户认证,一套下来概念能压死人。Flask给你留白,需要什么自己装。 但光返回字符串太寒碜。真实网页得从HTML模板渲染。Flask默认用Jinja2,在templates文件夹里放index.html,里面可以写{ { name }}这种占位符。视图函数改成return render_template('index.html', name='张三'),浏览器里就显示“张三”。模板里还能写循环、条件判断,语法跟Python很像,学起来不费劲。 数据从哪来?多半是数据库。SQLite配Flask够用了,sqlite3模块直接操作,或者用SQLAlchemy。我做过一个读书笔记的小站,每本书的标题、作者、读后感存在表里,首页用SELECT * FROM books查出来,模板里{ % for book in books %}循环渲染成卡片。整个项目不到200行代码,跑在树莓派上,家里局域网访问毫无压力。 要是想做个正经对外的网站,Flask也能扛,但得加WSGI服务器,比如gunicorn或者uWSGI,前面再挂Nginx。开发阶段用app.run()自带的服务器就行,它明确说了“不要用于生产”。我见过有人把Flask开发服务器直接暴露在公网,结果被人扫到,一晚上数据库就被拖走了。安全这事儿,省不得。 Django适合什么场景?内容多、表结构复杂、需要现成后台的项目。比如公司内部管理系统,十几个表关联,Django Admin几分钟就能生成增删改查界面。Flask要从头写表单、验证、权限,工作量翻倍。但Django的学习曲线也陡,光settings.py里那一堆配置就够看半天。我的建议是:小工具、API、原型用Flask;大型内容站、CMS用Django。没有绝对好坏,看手头的事。 还有个冷门但有意思的选项——PyScript。它让Python直接跑在浏览器里,通过WebAssembly。写个<py-script>标签,里面放Python代码,页面加载时执行。我试过用它做数据可视化,配合Matplotlib生成图表,完全不用后端。缺点是体积大,首次加载慢,生态还不成熟。玩玩可以,生产环境慎用。 说到底,Python做网页的核心就三件事:接收HTTP请求、处理业务逻辑、返回HTML响应。框架帮你把第一和第三步包装好了,你只需要关心中间的逻辑。选哪个框架,取决于你想花多少时间在配置上,以及项目到底有多复杂。别纠结,先写个能跑的页面出来,比看十篇对比文章都管用。 |