2012-03-14 25 views
3

私はWeb開発で新規です。 送信ボタン付きの簡単な作成/編集ユーザーフォームを実装しようとしています。Web APIとレンダリングテンプレートは、同じ関数呼び出しで呼び出す必要がありますか?

これを実装する方が良い方法を知りたいと思います。

I持っすでにウェブAPIのこの種を定義

URL   Method Description 
/users/  GET Gives a list of all users 
/users/  POST Creates a new user 
/users/<id> GET Shows a single user 
/users/<id> PUT Updates a single user 
/users/<id> DELETE Deletes a single user 

私の最初のアプローチ:

私は、2つの新しい "/ユーザー/追加" と "は/ usr /編集" 機能を作成し、 これは、上記の内部api/users /、method = PUT、012を呼び出すと、

app.route("https://stackoverflow.com/users/edit") 
def edit_user(){ 
    .... 
    .... 
    call the internal api /user/ with a "put" method 
    .... 
    render_template("edit.html") 

となります。最終的なテンプレートをレンダリングします。

私の第二のアプローチ:私の内部API /ユーザー/中

、私はHTMLテンプレートまたはJSONテキストをしたいかどうかを確認するためにHTTPヘッダを読み、ユーザー

言って戻って戻ろう私が代わりに/ユーザー/編集を呼び出すので、編集フォームを作成したいとき

def put(self, id): 
    //see the header of that request 
    if header == html 
     render_template("edit.html", .....) 
    if header == json 
     update the record 

私の質問、基本的に、私はKNていない、再び、私はPUTメソッドで、/ユーザー/呼び出し"/ user/add" "/ user/edit"ルートがフォームを作るために必要な場合や、異なる "post"や "put"メソッドを使って/ user/apiに単純に埋め込むことができます。

アイデアは、flaskから、ここから、プラグイン可能なビュー、私はより良い実装に

を作る方法を疑問に思っているか、その、それを行うには良い方法です?

ありがとうございます。

答えて

0

あなたの最初のアプローチは、あなたのURLが明確かつ論理的であるためです。また、フロントエンド(フォーム付きウェブサイト)とバックエンド(API)を分割すると、非常に役立ちます。通常のWebブラウザでは、WebサイトへのGETとPOST要求のみが行われるため、通常はput要求を開始できないため、PUT要求によってテンプレートをレンダリングすることは非常に困難です。

+0

これまでにこのようなことを実装しましたか?いくつかの経験を共有できますか? –

+0

Nope。私はバリデーションでフラスコ重量のフォームを作成します。このフォームの送信時に、フラスコテストクライアントまたはリクエストのPythonモジュールを使用して、新しいhttpリクエストを介して内部apiにデータを送信することができます。 – Jarus