如何在 Python (Aiohttp) 中将 html 按钮与 post 请求绑定?

How to bind html button with a post request in Python (Aiohttp)?

我开发了一个测试 aiohttp 的小项目并遇到了问题。我有一个 html 文件,其中包含一个输入表单和一个输入类型 =“提交”。同时,我在项目的视图中创建了“post”和“get”请求,其中“get”显示html页面,而“post”将有关用户的数据写入到数据库。我已经单独检查了“post”(使用 Postman)并且它工作正常。但是当我单击“注册”按钮时,它不会调用“post”函数。如何绑定?

文件main.py

import aiohttp_jinja2
import jinja2
from aiohttp.web import Application, View, run_app
from aiohttp.web_response import Response
from aiohttp_jinja2 import template
import os


@template('add_user.html')
async def add_user_handler(request):
    return {'path': os.getcwd()}


class AddUserView(View):
    async def post(self):
        ### here I put data to the database
        print('example')
        return Response(text='Everything is ok!')

    async def get(self):
        response = await add_user_handler(self.request)
        return response


if __name__=='__main__':
    app = Application()

    aiohttp_jinja2.setup(app, loader=jinja2.FileSystemLoader('./'))
    app.router.add_view('/add_user', AddUserView)
    run_app(app)

文件add_user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Add user page</title>
</head>
<body>
    <div class="center">
        <h2> Hello, this is the register page!</h2>
        <p>Put your data here:</p>
        <input type="text" name="username" id="username" maxlength=30 minlength=3 placeholder="Username"><br>
        <input type="submit" name="submit" id="post" value="Register"><br>
        <p>{{path}}</p>
    </div>
</body>
</html>

您需要用 form 标签包裹您的表单:

<form method="post" action="/add_user">
  <p>Put your data here:</p>
  <input type="text" name="username" id="username" placeholder="Username"><br>
  <input type="submit" name="submit" id="post" value="Register"><br>
</form>