我目前正在开展金字塔项目,但是我似乎无法从表单向应用程序提交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
dict是空的。此外,当我检查页面上的调试按钮时,POST请求已在列表中注册,但POST数据为空。
我是否遗漏了某些内容,或者是否有其他方式访问POST数据?
干杯, 贾斯汀
答案 0 :(得分:2)
我设法让它运转起来。来自ASP.NET背景的傻我忘记了POST表单提交的基础知识,而且每个表单字段都需要一个name ==属性。我把它们放进去后,一切都开始工作了。
答案 1 :(得分:1)
我什么都不做,我相信。
return {'project': 'Register_POST'}
POST参数存储在请求中,因此您必须执行以下操作。
def register_POST(self, request):
return {'project': request.POST}
要访问电子邮件输入(必须命名,例如:name="email"
),请使用get()
方法:
request.POST.get('email')
答案 2 :(得分:0)
<form method="post" role="form" action="/account/register"> {% csrf_token %}
尝试使用“csrf令牌”。希望它有效。剩下的代码看起来很好。