Python 通过路由传递变量

Python 通过路由传递变量,python,flask,flask-sqlalchemy,Python,Flask,Flask Sqlalchemy,因此,我有一个问题,我正在使用flask路由编辑我的项目中的现有选项卡。应该发生的是,我的项目存储了两个东西:用户和选项卡。我的数据库中有几个选项卡,我想为其创建编辑功能。因此,我正在创建和编辑路由,该路由将传递正在编辑的用户id和选项卡id。应该发生的是,正在编辑的选项卡数量和描述将显示在输入框中,供我编辑。然后,它应该在数据库中更改该选项卡,并返回到显示所有具有编辑功能的表的页面 发生的情况是,无论我单击哪个选项卡,它都会在输入框中显示第一个选项卡信息,并且当我提交以编辑添加并将更改提交到数

因此,我有一个问题,我正在使用flask路由编辑我的项目中的现有选项卡。应该发生的是,我的项目存储了两个东西:用户和选项卡。我的数据库中有几个选项卡,我想为其创建编辑功能。因此,我正在创建和编辑路由,该路由将传递正在编辑的用户id和选项卡id。应该发生的是,正在编辑的选项卡数量和描述将显示在输入框中,供我编辑。然后,它应该在数据库中更改该选项卡,并返回到显示所有具有编辑功能的表的页面

发生的情况是,无论我单击哪个选项卡,它都会在输入框中显示第一个选项卡信息,并且当我提交以编辑添加并将更改提交到数据库时,它会添加一个新选项卡,并为其提供更改的值。我将插入3段代码

**我确实导入了所有正确的sqlalchemy信息

第一段代码是数据库

class Users(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key = True)
    username = Column(String(16), nullable = False, unique = True, index = True)

class Tab_Event(Base):
    __tablename__ = 'tab_event'

    id = Column(Integer, primary_key = True)
    description = Column(String(200))
    amount = Column(String(10))#may be changed to a float or decimal value later on during development
    user_id = Column(Integer(10), ForeignKey('users.id'))
    users = relationship(Users)
代码的以下部分是正在使用的路由

@app.route('/user/<int:user_id>')
def DisplayUsers(user_id):
    user = session.query(Users).filter_by(id = user_id).one()
    items = session.query(Tab_Event).filter_by(user_id = user.id)
    return render_template('viewTabs.html', user = user, items = items)

@app.route('/newtab/<int:user_id>', methods = ['GET', 'POST'])
def AddNewTab(user_id):
    if request.method == 'POST':
        newTab = Tab_Event(amount = request.form['amount'], description = request.form['description'], user_id = user_id)
        session.add(newTab)
        session.commit()
        return redirect(url_for('DisplayUsers', user_id = user_id))
    return render_template('createTab.html', user_id = user_id)

@app.route('/edit/<int:user_id>/<int:tab_id>', methods = ['GET', 'POST'])
def EditTabEvent(user_id, tab_id):
    editTab = session.query(Tab_Event).filter_by(id = user_id).one()
    if request.method == 'POST':
        if request.form['name']:
            editTab.name = request.form['amount']
        if request.form['description']:
            editTab.description = request.form['description']
        session.add(editTab)
        session.commit()
        return redirect(url_for('DisplayUsers', user_id = user_id))
    else:
        return render_template('editTab.html', user_id = user_id, tab_id = tab_id, item = editTab)
@app.route(“/user/”)
def DisplayUsers(用户id):
user=session.query(Users).filter\u by(id=user\u id).one()
items=session.query(Tab\u事件)。筛选依据(user\u id=user.id)
返回呈现模板('viewTabs.html',user=user,items=items)
@app.route('/newtab/',方法=['GET','POST'])
def ADDNETAB(用户id):
如果request.method==“POST”:
newTab=Tab\u事件(金额=request.form['amount'],description=request.form['description'],user\u id=user\u id)
session.add(newTab)
session.commit()
返回重定向(url\u for('DisplayUsers',user\u id=user\u id))
返回呈现模板('createTab.html',user\u id=user\u id)
@app.route('/edit/',methods=['GET','POST']))
def EditTabEvent(用户id、选项卡id):
editTab=session.query(Tab\u事件).filter\u by(id=user\u id).one()
如果request.method==“POST”:
如有要求,请填写表格['name']:
editTab.name=request.form['amount']
如有要求,请填写表格['description']:
editTab.description=request.form['description']
会话.添加(编辑选项卡)
session.commit()
返回重定向(url\u for('DisplayUsers',user\u id=user\u id))
其他:
返回呈现模板('editTab.html',user\u id=user\u id,tab\u id=tab\u id,item=editTab)
最后一段代码是我用来编辑的html文档

<html>
  <body>

    <h1>This page is where new users are made</h1>
    <form action="{{url_for('AddNewTab', user_id = user_id, tab_id = item.id)}}" method="POST">
      <table>
        <tr>
          <td>Username</td>
          <td><input type="text" name="name"></td>
        </tr>
        <tr>
          <td>Amount</td>
          <td><input type="text" name="amount", value="{{item.amount}}"></td>
        </tr>
        <tr>
          <td>Description</td>
          <td><input type="text" name="description", value="{{item.description}}"></td>
        </tr>
        <tr>
          <td><input type="Radio">Personal</td>
          <td><input type="Radio">Business</td>
        </tr>
        <tr>
          <td><input type="submit" value="Edit Tab"></td>
        </tr>
      </table>
    </form>

  </body>
</html>

此页面是创建新用户的地方
用户名
数量
描述
个人的
生意
包含这些文件的存储库如下所示: vagrant>>付款>>此项目的所有文件都要在本地计算机上运行

请参见
EditTabEvent
中的SQL查询-您没有使用
tab\u id
来获取数据,因此始终获取第一个选项卡。请参见您的模型
tab\u Event
-
id
不是用户id(也有
user\u id
)但在查询中,您使用的是
id=user\u id
,因此应该是
id=tab\u id
谢谢您,您立即解决了这个问题。我有一种感觉,这是我设置的一个变量。因此,它引导正确的信息,但当我提交表单时,它没有对数据库进行更改,值也没有更改。你能帮我吗。当我设置新的值并提交时,我想这是在编辑路由def中,我尝试了一些事情,但没有成功@furasy您使用的是
session.add(editTab)
,所以可能会在数据库中将新值作为新行添加(当然是使用新的唯一ID)。如果要更新或原始行,请删除此选项。请参阅
EditTabEvent
中的SQL查询-您不使用
tab\u id
获取数据,因此始终获取第一个选项卡。请参阅您的模型
tab\u事件
-
id
不是用户id(也有
user\u id
)但在查询中,您使用的是
id=user\u id
,因此应该是
id=tab\u id
谢谢您,您立即解决了这个问题。我有一种感觉,这是我设置的一个变量。因此,它引导正确的信息,但当我提交表单时,它没有对数据库进行更改,值也没有更改。你能帮我吗。当我设置新的值并提交时,我想这是在编辑路由def中,我尝试了一些事情,但没有成功@furasy您使用的是
session.add(editTab)
,所以可能会在数据库中将新值作为新行添加(当然是使用新的唯一ID)。如果要更新或原始行,请删除此选项。