Pyramid自请求POST为空 - 无法获取POST数据

1 投票
3 回答
1920 浏览
提问于 2025-04-17 21:15

我现在在做一个关于金字塔的项目,不过我发现从表单提交POST数据到应用程序时遇到了问题。

我创建了一个基本的表单,内容如下:


    <form method="post" role="form" action="/account/register">
    <div class="form-group">
        <label for="email">Email address:</label>
        <input type="email" class="form-control" id="email" placeholder="you@domain.com">
        <p class="help-block">Your email address will be used as your username</p>
    </div>

    <!-- Other items removed -->
</form>

然后,我定义了以下路由配置:


    # projects __init__.py file
config.add_route('account', '/account/{action}', request_method='GET')
config.add_route('account_post', '/account/{action}', request_method='POST')

# inside my views file
@view_config(route_name='account', match_param="action=register", request_method='GET', renderer='templates/account/register.jinja2')
def register(self):
    return {'project': 'Register'}

@view_config(route_name='account_post', match_param="action=register", request_method='POST', renderer='templates/account/register.jinja2')
def register_POST(self):
    return {'project': 'Register_POST'}

现在,我在PyCharm中使用调试工具,以及在金字塔中的调试按钮,确认了最开始的GET请求是通过register方法处理的,当我点击提交按钮时,POST请求是通过*register_POST*方法处理的。

但是,我的问题是,在*register_POST*方法中调试时,self.request.POST这个字典是空的。而且,当我在页面上检查调试按钮时,POST请求确实在列表中注册了,但POST数据是空的。

我是不是漏掉了什么,或者有没有其他方法可以获取POST数据呢?

谢谢,
贾斯廷

3 个回答

0
   <form method="post" role="form" action="/account/register"> {% csrf_token %}

试试用“csrf token”。希望这样能解决问题。剩下的代码看起来没问题。

2

我终于搞定了。真是傻,之前我来自ASP.NET的背景,忘记了POST表单提交的基本知识,那就是每个表单字段都需要一个name属性。只要我把这些加上,所有东西就开始正常工作了。

1

这没什么用,我觉得。

return {'project': 'Register_POST'}

POST参数是存储在请求里的,所以你需要这样做。

def register_POST(self, request):
     return {'project': request.POST}

要访问邮箱输入框(这个输入框必须有名字,比如:name="email"),可以使用get()方法:

request.POST.get('email')

撰写回答