Python Flask框架详解
Flask是一个轻量级的Python Web框架,它基于Werkzeug和Jinja2构建。Flask提供了简单易用的API,使得开发Web应用变得更加容易。本文将详细介绍Flask框架的使用方法和示例。
安装Flask
在开始使用Flask之前,我们需要先安装Flask。可以使用pip命令来安装Flask:
pip install Flask
Hello World
下面是一个简单的Flask应用程序,它输出“Hello, World!”:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
在上面的代码中,我们首先导入了Flask模块,并创建了一个Flask应用程序。然后,我们使用@app.route
装饰器来定义路由,当用户访问根路径时,将调用hello_world
函数并返回“Hello, World!”字符串。最后,我们使用app.run()
方法来启动Flask应用程序。
路由
在Flask中,路由是指URL和函数之间的映射关系。可以使用@app.route
装饰器来定义路由。例如:
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
在上面的代码中,我们定义了两个路由。当用户访问根路径时,将调用index
函数并返回“Index Page”字符串。当用户访问“/hello”路径时,将调用hello
函数并返回“Hello, World”字符串。
路由可以包含变量,例如:
@app.route('/user/<username>')
def show_user_profile(username):
return 'User %s' % username
@app.route('/post/<int:post_id>')
def show_post(post_id):
return 'Post %d' % post_id
在上面的代码中,我们定义了两个带有变量的路由。当用户访问“/user/username”路径时,将调用show_user_profile
函数并返回“User username”字符串。当用户访问“/post/post_id”路径时,将调用show_post
函数并返回“Post post_id”字符串。其中,<username>
和<int:post_id>
是路由变量,可以在函数中使用。
请求和响应
在Flask中,请求和响应是通过全局变量request
和response
来处理的。可以使用request
对象来获取请求信息,例如:
from flask import request
@app.route('/login', methods=['POST', 'GET'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
return 'Username: %s, Password: %s' % (username, password)
else:
return '''
<form method="post">
<p><input type="text" name="username"></p>
<p><input type="password" name="password"></p>
<p><input type="submit" value="Login"></p>
</form>
'''
在上面的代码中,我们定义了一个路由“/login”,当用户访问该路径时,将调用login
函数。如果请求方法是POST,将从request.form
中获取用户名和密码,并返回“Username: username, Password: password”字符串。如果请求方法是GET,将返回一个包含用户名和密码输入框的HTML表单。
可以使用response
对象来设置响应信息,例如:
from flask import make_response
@app.route('/cookie')
def cookie():
resp = make_response('Set Cookie')
resp.set_cookie('username', 'flask')
return resp
在上面的代码中,我们定义了一个路由“/cookie”,当用户访问该路径时,将调用cookie
函数。该函数将返回一个包含“Set Cookie”字符串的响应,并设置一个名为“username”的Cookie,值为“flask”。
模板
在Flask中,可以使用Jinja2模板引擎来生成HTML页面。可以使用render_template
函数来渲染模板,例如:
from flask import render_template
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
在上面的代码中,我们定义了一个带有变量的路由“/hello/name”,当用户访问该路径时,将调用hello
函数并渲染名为“hello.html”的模板。模板中可以使用{{ name }}
语法来引用变量。
下面是一个简单的“hello.html”模板示例:
<!doctype html>
<html>
<head>
<title>Hello, {{ name }}</title>
</head>
<body>
<h1>Hello, {{ name }}</h1>
</body>
</html>
示例1:计算器
下面是一个简单的计算器示例,它可以接受两个数字和一个操作符,并返回计算结果:
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def index():
return '''
<form method="post">
<p><input type="text" name="num1"></p>
<p><input type="text" name="num2"></p>
<p><select name="operator">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select></p>
<p><input type="submit" value="Calculate"></p>
</form>
'''
@app.route('/', methods=['POST'])
def calculate():
num1 = float(request.form['num1'])
num2 = float(request.form['num2'])
operator = request.form['operator']
if operator == '+':
result = num1 + num2
elif operator == '-':
result = num1 - num2
elif operator == '*':
result = num1 * num2
elif operator == '/':
result = num1 / num2
return 'Result: %f' % result
if __name__ == '__main__':
app.run()
在上面的代码中,我们定义了两个路由。当用户访问根路径时,将调用index
函数并返回一个包含两个数字输入框和一个操作符下拉框的HTML表单。当用户提交表单时,将调用calculate
函数并计算两个数字的结果,并返回“Result: result”字符串。
示例2:文件上传
下面是一个简单的文件上传示例,它可以接受一个文件并保存到服务器:
from flask import Flask, request, redirect, url_for
import os
app = Flask(__name__)
@app.route('/')
def index():
return '''
<form method="post" enctype="multipart/form-data">
<p><input type="file" name="file"></p>
<p><input type="submit" value="Upload"></p>
</form>
'''
@app.route('/', methods=['POST'])
def upload():
file = request.files['file']
filename = file.filename
file.save(os.path.join('uploads', filename))
return redirect(url_for('uploaded_file', filename=filename))
@app.route('/uploads/<filename>')
def uploaded_file(filename):
return 'Uploaded file: %s' % filename
if __name__ == '__main__':
app.run()
在上面的代码中,我们定义了三个路由。当用户访问根路径时,将调用index
函数并返回一个包含文件上传框的HTML表单。当用户上传文件时,将调用upload
函数并保存文件到服务器,并重定向到“/uploads/filename”路径。当用户访问“/uploads/filename”路径时,将调用uploaded_file
函数并返回“Uploaded file: filename”字符串。其中,filename是上传的文件名。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python flask框架详解 - Python技术站