今天我们聊个挺酷的话题:用Python搭建一个网站!👨💻 是的,Python不仅仅能写脚本、做数据分析、搞AI,搭建网站也是完全不在话下。
很多朋友一提到做网站,脑子里可能会蹦出“HTML、CSS、JavaScript”这些前端玩意儿,但其实啊,后台才是网站的“心脏”,而Python在后台开发方面真的是相当拿手。
Step 1:选一个框架吧!——Django还是Flask?
在Python世界里,搭建网站一般会用到两大框架:Django和Flask。选哪个呢?看看需求:
-
Django:功能超级全,属于“重型武器”。如果你想做个功能复杂、内容丰富的大型网站,比如有会员系统、支付功能、消息通知这些,Django简直就是一把瑞士军刀!而且Django有强大的ORM(对象关系映射),直接把数据库表和Python对象绑定,数据查询、插入轻松搞定!
-
Flask:轻量、灵活,适合小而精的项目。它自带的东西少,但这其实是一种优势——适合开发简单的API或小型网站,代码量少,更容易控制。Flask更像是一个“骨架”,你可以根据需要自由地去扩展。
我们接下来用Flask举个例子,Django虽然也很好,但内容太多,一个新手可能会被复杂的结构搞晕。Flask嘛,适合咱们“快速上手”!
Step 2:安装Flask
准备工作很简单,用Python自带的pip
来安装Flask:
pip install Flask
几秒钟搞定!
Step 3:Hello, Flask! 用代码写“Hello World”
在编程界,写网站也得从“Hello, World!”开始。这段代码简单,但却是Flask网站的雏形:
from flask import Flask
app = Flask(__name__) # 初始化Flask应用
@app.route('/')
def hello():
return "Hello, World!" # 这是网站的首页内容
if __name__ == '__main__':
app.run(debug=True) # 启动服务,debug模式方便调试
解释一下这个小程序:
-
app = Flask(__name__)
:这里初始化了一个Flask应用实例,Flask的__name__
参数主要是为了告诉Flask文件的名称,便于定位资源和模块。 -
@app.route('/')
:这是Flask的“路由”,它定义了访问路径,这里我们设置的是网站的“/”路径,也就是主页。 -
app.run(debug=True)
:启动服务器,debug=True
可以让服务器在检测到代码变化时自动重启,方便开发时调试。
运行一下这个程序,打开浏览器输入http://127.0.0.1:5000
,你就能看到“Hello, World!”啦。是不是有点小激动😆?
Step 4:加入一点HTML
网站可不能光靠文字吧?咱们再给页面添点HTML,让它看起来像个网站。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return '''
<html>
<head><title>My Flask Site</title></head>
<body>
<h1>Hello from Flask!</h1>
<p>This is a simple website built with Flask.</p>
</body>
</html>
'''
if __name__ == '__main__':
app.run(debug=True)
这样一改动后,网页上不仅有文字,还会有一个标题和一段描述。虽然还比较简单,但这就是动态网页的开始!
Step 5:分离HTML,使用模板引擎
直接写HTML在Python代码里显然不太优雅对吧?Flask内置了一个模板引擎——Jinja2,可以让你把HTML和Python逻辑分离。这样代码清晰易懂,也更符合“代码和页面分离”的Web开发原则。
我们先创建一个模板文件夹templates
,然后在里面写一个HTML文件index.html
:
<!-- 文件路径:templates/index.html -->
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My Flask Site</title>
</head>
<body>
<h1>Hello from {{ name }}!</h1>
<p>This site is powered by Flask and Jinja2.</p>
</body>
</html>
{{ name }}
是Jinja2的变量占位符,意思是会用Python代码里传过来的变量来替换。
接下来,我们修改一下Flask代码,用render_template
来加载HTML模板:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html', name="Flask")
if __name__ == '__main__':
app.run(debug=True)
这样,你的代码和HTML页面就清晰分开了。访问网站时,{{ name }}
会被替换成“Flask”。
Step 6:加入表单和用户交互
一个网站如果只能看,不能互动,那就显得有些无聊了。接下来我们来加点表单,实现用户输入和数据处理。
假设我们加一个表单,让用户输入名字,然后在页面上打个招呼。
1. 修改HTML
在index.html
里加入一个表单,让用户可以输入名字:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Greet Me</title>
</head>
<body>
<h1>Hi, {{ name }}!</h1>
<form method="POST" action="/greet">
<label for="name">Enter your name:</label>
<input type="text" id="name" name="name">
<button type="submit">Submit</button>
</form>
</body>
</html>
2. 处理用户输入
接下来,我们在Flask代码中添加一个处理表单提交的函数。新增一个/greet
路由,接收POST请求,并处理用户提交的数据。
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html', name="Guest") # 默认显示Guest
@app.route('/greet', methods=['POST'])
def greet():
name = request.form.get('name') # 获取表单里的name字段
return render_template('index.html', name=name)
if __name__ == '__main__':
app.run(debug=True)
解释一下上面的代码:
-
request.form.get('name')
:从表单数据里获取用户输入的名字。 -
name=name
:传递变量到模板,让HTML页面显示用户输入的名字。
访问主页,输入名字,然后提交表单。网页上应该会打出“Hi, [你的名字]!”了。是不是特别人性化?这就是动态网页的魅力!
Step 7:部署到生产环境
虽然在本地玩挺好,但想让别人访问的话,还得把网站部署到服务器上。这里常用的部署方案是用Gunicorn搭配Nginx:
pip install gunicorn # 安装Gunicorn
然后,用下面这条命令启动Gunicorn来运行Flask应用:
gunicorn -w 4 -b 0.0.0.0:8000 app:app
-
-w 4
表示使用4个工作进程,这样可以提高并发处理能力。 -
-b 0.0.0.0:8000
表示绑定IP和端口,这样其他设备也能访问了。
当然,这只是部署的开始。生产环境中,我们还可以利用Nginx作为反向代理来转发请求给Gunicorn,从而提升性能和安全性。这部分配置可以详细参考Nginx官方文档。
到这儿,一个简单的网站就搭好了!用Flask和Python开发网站的过程其实不难,重点是先搞明白每一步的逻辑:路由、视图、模板、表单处理,再加点部署知识。