2017-12-11 27 views
1

フラスコ削除メソッドのハイパーリンクを与える方法。ここでコードHTMLコードです。私はハイパーリンクのためにHTMLで書いています。だから、どのようにフラスコの経路でURLを渡す与える。 私はFlaskフレームワークで作業していますが、データベースからエントリを削除しようとしています。次のコードはこのエラーを示しています: "要求されたURLに対してメソッドが許可されていません。"ハイパーリンクを与える方法​​フラスコ削除メソッドのタグ

{% extends "base.html" %} 
{% block head %} 
{{super()}} 
{% endblock %} 
{% block navbar %} 
{{super()}} 
{% endblock %} 
{% block content %} 
<div class="row"> 
<ol class="breadcrumb"> 
<li><a href="#"> 
<em class="fa fa-home"></em> </a></li> 
<li class="active">Users>View/Edit</li> 
</ol> 
</div><!--/.row--> 
<div class="row"> 
<div class="col-md-12"> 
<table class="table table-striped table-hover"> 

<thead> 
<tr> 
    <th> 
     Name 
    </th> 
    <th> 
     Email 
    </th> 
    <th> 
     Address 
    </th> 
    <th> 
     Aadharimage 
    </th> 

    <th> 
     Password 
    </th> 
    <th> 
     Locations 
    </th> 
    <th> 
     Dateofsub 
    </th> 
    <th> 
    Lastlogin 
    </th> 
    <th> 
    Control 
</th> 
<th> 
Delete 
</th> 
</tr> 
</thead> 
{% for values in endusers %} 
<tr> 
<td>{{values.name}}</td> 
<td>{{values.email}}</td> 
<td>{{values.address}}</td> 
<td> <img src="{{url_for('static', filename='assets/images  /{{values.aadharimage}}')}}" width="24" height="24">{{values.aadharimage}}</td>` 
<!-- <td><img src=" {{url_for('static', filename=' /assets/images/tms.png')}}" width="25" height="50"/></td>--> 
<td>********</td> 
<td>{{values.locations}}</td> 
<td>{{values.dateofsub}}</td> 
<td>{{values.lastlogin}}</td> 
<td><a href="/Control/resetuserpass/{{values.id}}" class="btn btninfo">Reset Password</a></td> 
<td><a href="{{ url_for('delete_user', postID=values.id) }}" class="btn btn-danger">Delete</a></td> 
</tr> 
{% endfor %} 

</table> 
<a href = "/page/new user"> <em class="fa fa-xl fa-plus-circle color-blue"></em> </a> 
</div> 
</div> 
{% endblock %} 


Here is the flask code this is correct ? I am trying for 2 days please solve this problem. While running thus code it showing 404 and 405 method. 




@app.route('/delete/<int:postID>', methods=['DELETE']) 
def delete_user(postID): 
if not session.get('logged_in'): 
    abort(401) 
sqlsession.execute('delete from values WHERE id = ?', [postID]) 
flash('Entry was deleted') 
return redirect(url_for('pageedituser')) 
+1

ブラウザは、DELETEメソッドを送信することはありません。しかし、どんな場合でも、リンクはGETだけになり、GETで**破壊的な操作をしてはいけません。ボタン付きのフォームを使用する必要があります。 –

+0

あなたは@danielの簡単な情報を教えてくれますか? –

答えて

4

あなたのHTMLには、GETメソッドが構築されています。あなたのメソッドをGETに変更するとこの問題は解決しますが、それは正解ではありません。答えはHTMLフォームを使用してフラスコサーバーにPOSTリクエストを送信することです。

HTML

<form action="{{ url_for('delete_user', postID=values.id) }}" method="POST"> 
</form> 

ビュー

@app.route('/delete/<int:post_id>', methods=['POST']) 

の改善答え

あなたが使用Javascriptをフラスコに要求を削除したい場合は、私はfetch

0123を使用することをお勧め

The HTML form element cannot be used for anything other than POST or GET directly, so any support for other methods should be done via XMLHttpRequest in javascript.

すなわち)

HTML

<td><a href="#" class="btn btn-danger" onclick="deletePost(23);">Delete</a></td> 

<script type="text/javascript"> 
    function deletePost(postId) { 
     return fetch('http://localhost:5000/delete' + '/' + postId, { 
     method: 'delete' 
     }).then(response => 
     console.log(response) 
    ); 
    } 
</script> 
関連する問題