Pyramid自请求POST为空 - 无法获取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
请求是通过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')