You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:59:22