我在Odoo v 10中遇到了联系表单中的错误,当我按下发送按钮时它会出现异常:
Traceback(最近一次调用最后一次): 在_dispatch result = request.dispatch()中输入文件“/usr/lib/python2.7/dist-packages/odoo/addons/base/ir/ir_http.py”,第195行 文件“/usr/lib/python2.7/dist-packages/odoo/http.py”,第823行,在dispatch raise werkzeug.exceptions.BadRequest('Session expired(invalid CSRF token)') BadRequest:400:错误请求
如果我添加代码以将其Github问题中建议的CSRF令牌加载到表单中:
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
它引导我到一个显示单词false
的新空白页面。
在“Web布局”中,我有下一个javascript代码:
<script type="text/javascript">
var odoo = {
csrf_token: "<t t-esc="request.csrf_token(None)"/>",
};
</script>
我不知道这个代码是手动添加还是默认带有Odoo,因为这是一个继承的安装。
“联系我们”块配置了Send an Email
动作和有效的Recipient email
,Thank You Page
工作。
这是添加块后的最终代码(没有CSRF隐藏输入):
<section class="as-contact-us" style="background-image: url(/theme_laze/static/src/img/our-work.jpg)">
<div class="container">
... Company description elements ...
<div class="col-md-8">
<form action="/website_form/crm.lead" method="post" data-model_name="mail.mail" data-success_page="/page/website_crm.contactus_thanks" class="s_website_form form-horizontal container-fluid mt32" enctype="multipart/form-data">
<div class="ascu-form">
<div class="row">
<div class="col-md-6">
<input class="form-control o_website_form_input" name="contact_name" required="" placeholder="Your Name*" type="text"/>
</div>
<div class="col-md-6">
<input class="form-control o_website_form_input" name="email_from" required="" placeholder="Your Email*" type="text"/>
</div>
</div>
<div class="row">
<div class="col-md-12">
<textarea class="form-control o_website_form_input" name="description" required="" placeholder="Message*"/>
</div>
<div class="col-md-12">
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<button class="creative-btn1 o_default_snippet_text">Send</button>
</div>
</div>
</div>
<input class="form-field" name="email_to" value="[email protected]" type="hidden"/>
</form>
</div>
... Div closures ...
</div>
</section>
有人知道问题在哪里吗?
我不想停用CSRF保护。
我是一个路由问题!请参阅下面的代码“csrf = False”并插入以解决问题。
# /project/admin/post/{menu.name}/{submenu.name}/insert
@http.route(['/project/admin/post/<string:project>/<string:area>/insert'],type='http', auth='user', ***csrf=False***, website=True)