第3章:路由与视图
3.1 路由的定义和作用
路由是URL到视图函数的映射。在Flask中,路由定义了当用户访问特定URL时应该调用哪个函数来处理请求。
示例代码:定义路由
python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'Welcome to the Home Page!'
在这个例子中,@app.route('/')
装饰器定义了一个路由,当用户访问网站的根URL时,将调用home
函数。
3.2 视图函数的编写
视图函数是处理请求并返回响应的函数。它们通常接收请求对象作为第一个参数,但也可以不使用。
示例代码:编写视图函数
python
@app.route('/about')
def about():
return 'This is the About Page.'
3.3 URL规则和动态路由
URL规则可以包含变量部分,使得路由可以匹配多种URL模式。
示例代码:动态路由
python
@app.route('/user/<username>')
def show_user_profile(username):
return f'User {username}'
在这个例子中,<username>
是一个变量,可以匹配任何字符,直到下一个斜杠。
3.4 HTTP方法的处理
视图函数可以处理不同的HTTP方法,如GET、POST、PUT等。
示例代码:处理HTTP方法
python
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return do_the_login()
else:
return show_the_login_form()
在这个例子中,login
视图函数可以处理GET请求来显示登录表单,以及POST请求来执行登录。
3.5 路由的高级特性
Flask的路由系统还支持一些高级特性,如路由的合并、转换和保护。
示例代码:使用methods
和subdomain
参数
python
@app.route('/api/data', methods=['GET', 'POST'], subdomain='api')
def api_data():
if request.method == 'POST':
return process_data()
else:
return get_data()
在这个例子中,路由仅在子域名api
上有效,并且可以处理GET和POST请求。
3.6 错误处理
Flask允许你定义错误处理视图,来捕获和处理特定的错误。
示例代码:定义错误处理视图
python
@app.errorhandler(404)
def page_not_found(error):
return 'This page does not exist', 404
3.7 总结
本章介绍了Flask中的路由和视图,包括如何定义路由、编写视图函数、使用动态路由和处理HTTP方法。