2016-03-31 5 views
1

Flask(とLithium)のパターンは、単一のビューメソッドが複数のHTTP動詞に対応しています。例:FlaskビューメソッドとSRP

@app.route('/login', methods=['GET', 'POST']) 
def login(): 
    error = None 
    if request.method == 'POST': 
     if request.form['username'] != app.config['USERNAME']: 
      error = 'Invalid username' 
     elif request.form['password'] != app.config['PASSWORD']: 
      error = 'Invalid password' 
    else: 
     session['logged_in'] = True 
     flash('You were logged in') 
     return redirect(url_for('show_entries')) 
    return render_template('login.html', error=error) 

これは、複数のことを行う膨大なビューメソッドにつながると思います。

私はこれがFlaskのデフォルトパターンである理由を聞いてきましたが、今はmethod-based viewsが存在することがわかります。

まだ、フレームワークには非メソッドベースのビューがあるのはなぜですか?すべてのクライアント/サーバープロトコルがRESTを介して話すわけではないので、メソッドベースのビューは本質的にREST風味がありますか?

答えて

4

簡単な答えは簡単で、しばしばよりクリーンです。ビュー の大半はGET方法であるので、フラスコのような装飾が施され 景色を眺めながら、それは非常に簡単になります:私はあなたが少なく肥大化見つけるMethodViewを使用して表現したいと思った場合、私は終わるだろう

@app.route('/') 
def home(): 
    thing = do_fun_stuff() 
    return render_template('home.html', foo=thing) 

class HomeView(MethodView): 

    def get(self): 
     thing = do_fun_stuff() 
     return render_template('home', foo=thing) 

app.add_url_rule('/', view_func=HomeView.as_view('home')) 

実際には、あなたのlogin()コードを片付け、そしてフラスコ-WTF、フラスコ、ログイン、 はあなたトンを招く使用して、より良いフォームの処理と検証を使用して ことにより、少ない肥大化し作ることができますo次のようなログインプロセス:

app.route('/login', methods=['GET', 'POST']) 
def login(): 
    form = LoginForm() 
    if form.validate_on_submit(): 
     login_user(form.user) 
     return redirect(url_for('show_entries')) 
    return render_template('login.html', form=form) 

これは長い間言いますと、オプションを持つことはいいことです。フラスコは あなたの開発に特定の物語を強制していないし、 プロジェクトで肥大化しているものは別のゴールを解決する別のもので簡潔かもしれない。

関連する問題