Python 从HTML上的表单传递变量时返回类型错误:delete_user()缺少1个必需的位置参数:';usr#U名称';
delete.html页面中的表单通过Python 从HTML上的表单传递变量时返回类型错误:delete_user()缺少1个必需的位置参数:';usr#U名称';,python,forms,flask,flask-wtforms,Python,Forms,Flask,Flask Wtforms,delete.html页面中的表单通过action=“{url\u for('admin.delete\u user',usr\u name=user.username)}”method=“POST”调用Flask routedelete\u user 终端显示呼叫post,如下所示,通过usr\u name=test1,但随后开始出错 127.0.0.1 - - [09/May/2020 22:31:21] "POST /admin/delete HTTP/1.1" 200 - 127.0.0
action=“{url\u for('admin.delete\u user',usr\u name=user.username)}”method=“POST”
调用Flask routedelete\u user
终端显示呼叫post,如下所示,通过usr\u name=test1,但随后开始出错
127.0.0.1 - - [09/May/2020 22:31:21] "POST /admin/delete HTTP/1.1" 200 -
127.0.0.1 - - [09/May/2020 22:31:27] "POST /admin/delete_user?usr_name=test1 HTTP/1.1" 500 -
Traceback (most recent call last):
File "/home/daniel/anaconda3/envs/db_ClashRoyal/lib/python3.7/site-packages/flask/app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "/home/daniel/anaconda3/envs/db_ClashRoyal/lib/python3.7/site-packages/flask/app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "/home/daniel/anaconda3/envs/db_ClashRoyal/lib/python3.7/site-packages/flask/app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/daniel/anaconda3/envs/db_ClashRoyal/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/home/daniel/anaconda3/envs/db_ClashRoyal/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/home/daniel/anaconda3/envs/db_ClashRoyal/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/daniel/anaconda3/envs/db_ClashRoyal/lib/python3.7/site-packages/flask/app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/daniel/anaconda3/envs/db_ClashRoyal/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/home/daniel/anaconda3/envs/db_ClashRoyal/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "/home/daniel/anaconda3/envs/db_ClashRoyal/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/daniel/anaconda3/envs/db_ClashRoyal/lib/python3.7/site-packages/flask_login/utils.py", line 272, in decorated_view
return func(*args, **kwargs)
TypeError: delete_user() missing 1 required positional argument: 'usr_name'
127.0.0.1 - - [09/May/2020 22:31:27] "GET /admin/delete_user?__debugger__=yes&cmd=resource&f=debugger.js HTTP/1.1" 200 -
127.0.0.1 - - [09/May/2020 22:31:27] "GET /admin/delete_user?__debugger__=yes&cmd=resource&f=jquery.js HTTP/1.1" 200 -
127.0.0.1 - - [09/May/2020 22:31:27] "GET /admin/delete_user?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1" 200 -
127.0.0.1 - - [09/May/2020 22:31:27] "GET /admin/delete_user?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 200 -
您可以看到下面的delete.html和delete\u userflask路径,感谢您的提示和帮助
================ route.py ===============
from app import db, User
from flask import flash
from flask_login import login_required
@mod.route('/delete_user', methods=['POST'])
@login_required
def delete_user(usr_name):
user = User.query.filter_by(email=req[usr_name]).first()
flash( user.username + 'been deleted', success)
return '<h1>Removed</h1>'
================ deleted.html ===============
{% extends "admin/admin_template.html" %}
{% block title %}Delete User{% endblock %}
{% block main %}
<!-- Button trigger modal -->
<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#warning">
Delete
</button>
<!-- Modal -->
<div class="modal fade" id="warning" tabindex="-1" role="dialog" aria-labelledby="warningLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" style="color:red;" id="warningLabel">Do you want to remove {{ user.username }}</h5>
</div>
<div class="modal-body">
<p>{{user.email}} about to remove</p>
{% if user.is_admin %}
<p style="color:red">{{ user.username}} is an administrator user</p>
{% endif %}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<form action="{{ url_for('admin.delete_user', usr_name=user.username) }}" method="POST">
<input class="btn btn-danger" type="submit" value="Delete">
</form>
</div>
</div>
</div>
</div>
{% endblock %}
============================route.py===============
从应用程序导入数据库,用户
从烧瓶进口闪蒸
从flask\u登录需要导入登录
@mod.route('/delete_user',methods=['POST'])
@需要登录
def delete_用户(usr_名称):
user=user.query.filter\u by(email=req[usr\u name]).first()
flash(user.username+“已删除”,成功)
返回“已删除”
======================deleted.html===============
{%extends“admin/admin_template.html”%}
{%block title%}删除用户{%endblock%}
{%block main%}
删除
是否要删除{{user.username}
{{user.email}}即将删除
{%if user.is_admin%}
{{user.username}是管理员用户
{%endif%}
接近
{%endblock%}
您正确地传递了usr\u name=user.username但您的路线不接受任何此类参数。您需要将路线更改为如下所示:
@mod.route('/delete_user/<usr_name>', methods=['POST'])
@mod.route('/delete_user/',methods=['POST'])
您还可以选择传递类型,如:
@mod.route('/delete_user/<str:usr_name>', methods=['POST'])
@mod.route('/delete_user/',methods=['POST'])
作为参考,您可以浏览:并搜索将追随者与应用程序集成在一起的。我知道这并不是您想要的,但您可能会发现它对于如何将参数从url传递到视图很有用。谢谢您的解释和链接。