Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从HTML上的表单传递变量时返回类型错误:delete_user()缺少1个必需的位置参数:';usr#U名称';_Python_Forms_Flask_Flask Wtforms - Fatal编程技术网

Python 从HTML上的表单传递变量时返回类型错误:delete_user()缺少1个必需的位置参数:';usr#U名称';

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

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.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.htmldelete\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传递到视图很有用。

谢谢您的解释和链接。