|
用Python搭网站,网站最省事的搭建路径是Flask。Django功能全但太重,网站FastAPI更适合写API而非传统网页。搭建如果你只是网站想跑通一个能看的东西,Flask十几行代码就够。搭建 先装库: pip install flask 然后新建一个app.py,网站写这些: from flask import Flask,搭建 render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') if __name__ == '__main__': app.run(debug=True) 这段代码干的事:创建一个应用实例,定义根路径返回什么,网站启动开发服务器。搭建debug=True意味着改代码后自动重启,网站省去手动折腾。搭建但上线时务必关掉,网站否则报错页面会暴露源码路径。搭建 模板文件放在templates/文件夹里。网站index.html可以长这样: <!DOCTYPE html> <html> <head><title>测试页</title></head> <body> <h1>{ { message }}</h1> </body> </html> 注意{ { message }}是Jinja2模板语法。Flask默认用Jinja2渲染。要传变量,改一下视图函数: @app.route('/') def index(): return render_template('index.html', message='你好,Python') 跑起来后浏览器访问http://127.0.0.1:5000,看到“你好,Python”就算通了。我第一次跑的时候忘了建templates文件夹,报TemplateNotFound,查了十分钟才发现是路径问题。Flask对目录结构有要求,模板必须放在templates里,静态文件(CSS、JS、图片)放在static里。 静态文件引用方式: <link rel="stylesheet" href="{ { url_for('static', filename='style.css') }}"> url_for是Flask内置的URL构建函数,比手写路径靠谱。改路由时不用去模板里一个个改链接。 如果要做多页面,加路由就行: @app.route('/about') def about(): return render_template('about.html') 处理表单用request对象: from flask import request @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] return f'收到:{ username}' return render_template('login.html') 这里有个坑:request.form['username']如果字段不存在会直接抛400错误。稳妥点用request.form.get('username'),返回None而不是崩掉。 数据库这块,小型项目用SQLite加SQLAlchemy就够了。不用装MySQL,一个文件搞定。但SQLAlchemy的ORM写法需要花点时间适应,尤其是关系映射那块。我见过不少人卡在db.create_all()没生效上,多半是因为模型类没被导入,Flask没注册到。 部署的话,开发服务器不能直接暴露到公网。用Gunicorn加Nginx是常见组合。Gunicorn负责跑Python进程,Nginx处理静态文件和反向代理。命令大概这样: gunicorn -w 4 -b 127.0.0.1:8000 app:app -w 4是4个worker进程。具体开几个看CPU核数,一般2 * 核数 + 1。但别在1核1G的机器上开太多,内存扛不住。 Nginx配置里把/static指向静态文件夹,其他请求转发给Gunicorn。这样静态文件不走Python,速度快很多。 整条链路跑通后,你会发现Python搭网站的门槛其实在部署和环境配置上,写代码反而是最简单的部分。Flask的哲学是给你最小核心,其他自己选。这既是优点也是缺点——灵活但需要自己做技术决策。如果不想折腾,Django自带admin和ORM,开箱即用,代价是学习曲线更陡。 选哪个取决于你要做什么。一个展示页、一个小工具,Flask半小时能上线。要用户系统、后台管理、权限控制,Django更省事。 |