flask简单路由(视图函数)
简单路由(视图函数)
简单返回html
@app.route('/tmp')
def tmp_page(): # 函数名为tmp_page,对应url_for('tmp_page')
return render_template('tmp.html')
@app.route('/Custom_routing')
def Custom_routing_page():
return render_template('/Custom_routing/index.html')
# Custom_routing
post请求路由(接受前端数据类型)
@app.route('/route_message_parameter/message_form', methods=['POST'])
def route_message_parameter_message_form():
# 处理POST请求
try:
name = request.form.get('name')
location = request.form.get('location')
age = request.form.get('age')
if not name or not location or not age:
return "请填写所有字段", 400
return f'你好, {name},你来自{location},你今年{age}岁。'
except Exception as e:
return f'发生错误: {str(e)}', 400
自定义路由
采用继承的方法
class DateConverter(BaseConverter):
def to_python(self, value):
return datetime.strptime(value, '%Y-%m-%d')
def to_url(self, value):
return value.strftime('%Y-%m-%d')
# 注册自定义转换器,现在转换器名字叫date
app.url_map.converters['date'] = DateConverter
@app.route('/Custom_route/date_event/<date:custom_date>')
def show_date_event(custom_date):
# 现在custom_date是一个datetime对象
print(custom_date)
return f'今天是{custom_date.strftime("%Y-%m-%d")},欢迎来到自定义路由!'
在路由内部也能预设一些参数
@app.route('/generate_url')
def generate_url():
specific_date = datetime(2024, 6, 15)
return url_for('show_date_event', custom_date=specific_date)
路由内部也可以用regex正则表达式
# regex正则表达式路由
class RegexConverter(BaseConverter):
def __init__(self,url_map,regex):
# 重写父类方法
super(RegexConverter,self).__init__(url_map)
# 原始的 BaseConverter 没有存储正则表达式的机制,我们需要自己保存:(说以有这一步)
self.regex = regex #保存正则表达式
def to_python(self,value):
print('你好,这里调用了to_python'+value)
return value
app.url_map.converters['my_cv_regex'] = RegexConverter
@app.route("/user/<my_cv_regex(r'1[3456789]\d{9}'):user_id>")
def get_user(user_id):
if not re.match(r'1[3456789]\d{9}', user_id):
return None #其实这边return不会执行到
return f"格式正确,用户ID: {user_id}"
异常捕获
一般我们用abort()抛出异常
@app.route("/user/<my_cv_regex(r'1[3456789]\d{9}'):user_id>")
def get_user(user_id):
if not re.match(r'1[3456789]\d{9}', user_id):
abort(404) # 如果不匹配,返回404错误
return None #其实这边return不会执行到
# try-except捕获异常
try:
if re.match(r'1[3456789]\d{9}', user_id):
print(f"格式正确,用户ID: {user_id}")
return render_template('Custom_routing/user.html', user_id=user_id)
# 我这边没有建立user.html模板,所以会报错让except捕获400,我没处理是为了和404对比
except Exception as e:
return f"发生错误: {str(e)}", 400
你可以使用errorhandler自定义处理异常,你可以抛出一个页面也可以直接return你要表达的语句
@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404
如果说程序异常崩溃,类似于无法找到渲染页面
我们就用try-except捕获异常处理
前端js如何联系app.py
下面是一个简单的前端逻辑处理
他的功能很简单:对post传递name,location,age以及判断用户输入
try {
// 发送数据到服务器
const response = await fetch('/route_message_parameter/message_form', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams({
'name': name,
'location': location,
'age': age
})
});
if (response.ok) {
const message = await response.text();
document.getElementById('messageText').textContent = message;
document.getElementById('result').style.display = 'block';
} else {
throw new Error('服务器返回错误');
}
} catch (error) {
alert('提交失败,请稍后重试: ' + error.message);
}
});

浙公网安备 33010602011771号