金字塔self.request.POST为空

我目前正在研究一个金字塔项目,但是我似乎无法将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请求正在由注册方法处理,并且当我点击提交按钮时, POST请求被处理* register_POST *方法。

但是,我的问题是从* register_POST *方法中调试, self.request.POST字典是空的。 此外,当我检查页面上的调试按钮时,POST请求已在列表中注册,但POST数据为空。

我是否缺少某些东西,还是有其他方式访问POST数据?

干杯,贾斯汀


这没什么,我相信。

return {'project': 'Register_POST'}

POST参数存储在请求中,所以你必须做这样的事情。

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

要访问电子邮件输入(必须命名,例如: name="email" ),请使用get()方法:

request.POST.get('email')

我设法让它工作。 愚蠢的我,来自ASP.NET背景忘了POST表单提交的基础知识,这是每个表单字段需要一个名称==属性。 只要我把它们放入,一切都开始工作。


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

尝试使用“csrf令牌”。 希望它有效。 其余代码看起来不错。

链接地址: http://www.djcxy.com/p/71949.html

上一篇: Pyramid self.request.POST is empty

下一篇: Python 'requests' hide params (in post)