这是我的代码:
{% if request.path == '/employees' %}
<form action="{{ url_for('employees_name', employee_id=x) }}" />
EmployeeId: <input type="text" name=x><br>
<input type="submit" value="Submit">
</form>
{% endif %}
E.g。当我输入“1”作为输出时,我得到:
http://127.0.0.1:5002/employees/?x=1
但我需要这个:
http://127.0.0.1:5002/employees/1
这是我的Python代码:
app = Flask(__name__)
api = Api(app)
class Employees_Name(Resource):
def get(self, employee_id):
conn = db_connect.connect()
query = conn.execute("select * from employees where EmployeeId =%d " %int(employee_id))
result = {'data': [dict(zip(tuple (query.keys()) ,i)) for i in query.cursor]}
return Response(render_template('test.html', result=result, mimetype='text/html'))
api.add_resource(Employees, '/employees')
有办法吗?感谢
答案 0 :(得分:1)
使用'GET'处理表单时,表单数据将被格式化为URL后附加的查询字符串。通常的方法是使用POST
端点来处理表单和验证表单数据,然后重定向到像您这样的GET
端点。
所以,代码可能是这样的:
from flask import request, url_for, redirect
...
class Employees(Resource):
def post(self):
employee_id = request.form.get('employee_id')
# validate...
return redirect(url_for('employee', employee_id=employhee_id))
class Employee(Resource):
def get(self, employee_id):
conn = db_connect.connect()
...
api.add_resource(Employees, '/employees')
api.add_resource(Employee, '/employees/<int:employee_id>') # this rule is waht you want
在模板中:
<form action="{{ url_for('employees') }}">
EmployeeId: <input type="text" name="employee_id"><br>
<input type="submit" value="Submit">
</form>