Flask应用中仅用Python实现点击按钮调用关注函数的方案咨询
嘿,我完全懂你不想碰JavaScript/Ajax的心情——毕竟能用Python搞定的事,为啥要折腾别的呢!其实完全不用Ajax也能实现关注/取消关注功能,靠Flask的路由和HTML表单就能搞定,这是最适合你的简便方案,一步步给你说:
第一步:把按钮改成表单提交形式
纯HTML按钮本身不会触发后端请求,所以我们把它放在<form>标签里,通过表单提交来调用你的follow函数。修改后的按钮代码如下:
<form method="POST" action="{{ url_for('follow') }}"> <!-- 隐藏字段传递要关注的用户ID,根据你的实际变量调整 --> <input type="hidden" name="user_id" value="{{ target_user.id }}"> <button type="submit" class="btn btn-info btn-block"> <span class="fa fa-user"></span> Follow </button> </form>
method="POST":因为关注是修改数据的操作,用POST比GET更安全,也符合HTTP规范action="{{ url_for('follow') }}":指定表单提交到Flask的follow路由- 隐藏字段
user_id:用来告诉后端要关注的是哪个用户,你需要把target_user.id换成你模板里实际的用户ID变量
第二步:给你的follow函数加上Flask路由
现在需要把你的follow函数变成Flask可访问的路由,处理表单的POST请求:
from flask import redirect, url_for, request, flash from flask_login import current_user # 如果你用了Flask-Login管理用户 @app.route('/follow', methods=['POST']) def follow(): # 从表单里获取要关注的用户ID user_id = request.form.get('user_id') # 这里写你的关注逻辑,比如: target_user = User.query.get(user_id) if target_user and not current_user.is_following(target_user): current_user.follow(target_user) db.session.commit() flash('你已关注该用户!') # 操作完成后跳回原来的页面(比如用户主页) return redirect(url_for('user_profile', user_id=user_id))
第三步:扩展取消关注功能
同样的逻辑,你可以复制上面的代码改成取消关注的路由和按钮,还能通过模板判断显示不同按钮:
<!-- 在模板里判断当前用户是否已关注,显示对应按钮 --> {% if current_user.is_following(target_user) %} <form method="POST" action="{{ url_for('unfollow') }}"> <input type="hidden" name="user_id" value="{{ target_user.id }}"> <button type="submit" class="btn btn-secondary btn-block"> <span class="fa fa-user-times"></span> Unfollow </button> </form> {% else %} <form method="POST" action="{{ url_for('follow') }}"> <input type="hidden" name="user_id" value="{{ target_user.id }}"> <button type="submit" class="btn btn-info btn-block"> <span class="fa fa-user"></span> Follow </button> </form> {% endif %}
对应的取消关注路由:
@app.route('/unfollow', methods=['POST']) def unfollow(): user_id = request.form.get('user_id') target_user = User.query.get(user_id) if target_user and current_user.is_following(target_user): current_user.unfollow(target_user) db.session.commit() flash('你已取消关注该用户!') return redirect(url_for('user_profile', user_id=user_id))
为啥这个方案适合你?
- 完全不用写任何JavaScript/Ajax代码,纯Python+HTML搞定
- 逻辑简单直观,符合你想用Python实现的需求
- 唯一的小缺点是每次点击按钮页面会刷新,但对于不想碰JS的场景来说,这是最省心的选择
内容的提问来源于stack exchange,提问作者JustABeginner
相关产品推荐
相关产品推荐

