如何解决FastAPI和Jinja2发布方法不起作用
我一直在一个项目上苦苦挣扎,我想从MongoDB中检索数据并在带有Jinja2模板的fastAPI Webapp中显示它已有一段时间了,似乎无法弄清楚出了什么问题。通过GET方法进行的数据传输工作正常,但是,我似乎无法通过用户按下一个按钮使它正常工作,并且相应项的ID被传输回后端。我在做什么错了?
这是我的代码:
主文件:
from pymongo import MongoClient
# pprint library is used to make the output look more pretty
from fastapi import FastAPI,Request,Form
from fastapi.templating import Jinja2Templates
from mongofunctions import *
# connect to MongoDB
cluster = MongoClient('mymongoaddress')
db = cluster["ulysses"]
collection = db["test"]
# initialize fastAPI
templates = Jinja2Templates(directory='templates')
app = FastAPI()
# put all db entries into a giant list
all_items=[]
for inventory in collection.find({}):
all_items.append(inventory)
#this is home route
@app.get("/")
async def do_stuff(request: Request):
return templates.TemplateResponse("content.html",{"request": request,"all_items": all_items})
@app.post('/')
def form_post(request: Request):
print('hello world')
return templates.TemplateResponse('content.html',context={'request': request})
layout.html:
<html>
<head>
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css">
<link rel="stylesheet" type="text/css" href="semantic/dist/semantic.min.css">
<script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script>
<script src="semantic/dist/semantic.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.js"></script>
</head>
<body>
<div class="ui container">
<br>
<h1>Overview</h1>
<br>
<button class="ui red labeled icon button">
<i class="arrow up icon"></i>
Upload
</button>
<table class="ui celled table">
<thead>
<tr><th>Date</th>
<th>ID</th>
<th>NAME</th>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
<th>Barcode</th>
<th></th>
<th></th>
<th><div id='tags' style='width:300px'></div></th>
</tr></thead>
<tbody>
{% block content %}
{% endblock %}
</tbody>
</table>
</div>
</body>
</html>
content.html:
{% extends "layout.html" %}
{% block content %}
{# loops over all MongoDB items and creates table elements for them #}
{% for item in all_items %}
{% set id = item['_id'] %}
<tr>
<td><nobr>{{ item['date'] }}</nobr></td>
<td><nobr>{{ item['_id'] }}</nobr></td>
<td><nobr>{{ item['sample'] }}</nobr></td>
<td><nobr>{{ item['A'] }}</nobr></td>
<td><nobr>{{ item['B'] }}</nobr></td>
<td><nobr>{{ item['C'] }}</nobr></td>
<td><nobr>{{ item['D'] }}</nobr></td>
<td style="text-align:center">
<form action="/bar/{{ item['_id'] }}" method="POST" role="form">
<button type="submit" class="ui red icon button" id="bar_{{ item['_id'] }}" value="{{ id }}">
<i class="barcode icon"></i>
</button>
</form>
</td>
<td style="text-align:center">
<form action="/path/{{ item['_id'] }}" method="POST" role="form">
<input type="submit" id="_id" name="_id" value="{{ item['_id'] }}">
<button type="submit" class="ui red icon button" id="path_{{ item['_id'] }}">
<i class="folder icon"></i>
</button>
</form>
</td>
<td style="text-align:center">
<form action="/edit/{{ item['_id'] }}" method="POST" role="form">
<input type="hidden" id="_id" name="_id" value="{{ item['_id'] }}">
<button type="submit" class="ui red button" id="edit_{{ item['_id'] }}">
Edit
</button>
</form>
</td>
<td>
Tags will go here at some point
</td>
</tr>
{% endfor %}
{% endblock %}
我想以一种方式构建它,当用户按下与给定ID关联的条形码按钮时,该数字将回发到python端,在这里我可以将其连接到我制作的另一个程序。但是我似乎得到的所有结果都是“不允许的方法”。我试图从这个https://eugeneyan.com/writing/how-to-set-up-html-app-with-fastapi-jinja-forms-templates/博客中学习如何做,但是一旦尝试更改该示例的相关内容,我就将其销毁...我怀疑问题出在Jinja某处,但我不确定,因为这是我第一次使用它。
非常感谢您的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。