简单路由(视图函数)
简单返回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 "请填写所有字段", 400return 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);}});