2012-02-12 35 views
7

Tôi đang cố đưa ra yêu cầu POST trong mẫu jinja trong Flask. Tuy nhiên, các tham số được truyền qua GET theo mặc định, và phương thức này chỉ chấp nhận các yêu cầu POST.Đưa ra yêu cầu POST với url_for trong Flask

Tôi đã thử chỉ định _method, như dưới đây, nhưng nó vẫn chuyển tham số bằng GET thay vì POST.

<li><a href = "{{ url_for('save_info', _method='POST', filepath=s.name) }}"><div class="nodes">{{ s.title}} - {{ song.owner }}</div></a></li> 

(Thông báo lỗi giống nhau hay không tôi chỉ định _method).

+0

Cảm ơn, không biết về '_method' arg. – iurii

Trả lời

10

Tất cả các liên kết là yêu cầu GET. Bạn không thể ép buộc POST.

Một thay thế sẽ là:

@app.route('/save_info/<filepath>', methods=['GET', 'POST']) 
def save_info(filepath): 
    if request.method == 'POST' or filepath: 
    ... 

Bạn sẽ phải tìm ra một cách tốt đẹp để buộc mã của bạn để bỏ qua mà bạn gửi một yêu cầu GET.

+0

Hm, có cách nào khác để làm điều này mà không truyền thông tin thông qua URL, sau đó, cách thức biểu mẫu thực hiện? Đây không phải là một hình thức thực tế theo cách nó được trình bày cho người dùng, nhưng đó là ý tưởng tương tự (một lựa chọn được trình bày cho người dùng). – chimeracoder

+0

Bạn không thể gửi yêu cầu 'POST' mà không có AJAX hoặc một biểu mẫu, thật đáng buồn. – Blender

2

Bạn có thể tạo biểu mẫu chỉ chứa nút gửi hoặc gửi POST bằng AJAX hoặc một số tập lệnh phía máy khách khác. Theo tôi biết, bạn không thể tạo liên kết gửi POST.

0

Bạn có thể thêm Middelway để tìm đối số GET ghi đè phương thức http. Nhìn có: http://flask.pocoo.org/snippets/38/

liên kết mới của bạn sẽ trông như thế này:

<li><a href = "{{ url_for('save_info', __METHOD_OVERRIDE__='POST', filepath=s.name) }}"><div class="nodes">{{ s.title}} - {{ song.owner }}</div></a></li> 
Các vấn đề liên quan