<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 導航 - [索引](# "總目錄") - [下一頁](# "步驟 6: 模板") | - [上一頁](# "步驟 4: 請求數據庫連接") | - [Flask 0.10.1 文檔](#) ? - [教程](#) ? # 步驟 5: 視圖函數 現在數據庫連接已經正常工作,我們終于可以開始寫視圖函數了。我們一共需要寫四個: ### 顯示條目 這個視圖顯示數據庫中存儲的所有條目。它綁定在應用的根地址,并從數據庫查詢出文章的標題和正文。id 值最大的條目(最新的條目)會顯示在最上方。從指針返回的行是按 select 語句中聲明的列組織的元組。這對像我們這樣的小應用已經足夠了,但是你可能會想把它轉換成字典。如果你對這方面有興趣,請參考 [*簡化查詢*](#)的例子。 視圖函數會將條目作為字典傳遞給 show_entries.html 模板,并返回渲染結果: ~~~ @app.route('/') def show_entries(): cur = g.db.execute('select title, text from entries order by id desc') entries = [dict(title=row[0], text=row[1]) for row in cur.fetchall()] return render_template('show_entries.html', entries=entries) ~~~ ### 添加條目 這個視圖允許已登入的用戶添加新條目,并只響應 POST 請求,實際的表單顯示在show_entries 頁。如果一切工作正常,我們會用 [flash()](# "flask.flash") 向下一次請求發送提示消息,并重定向回 show_entries 頁: ~~~ @app.route('/add', methods=['POST']) def add_entry(): if not session.get('logged_in'): abort(401) g.db.execute('insert into entries (title, text) values (?, ?)', [request.form['title'], request.form['text']]) g.db.commit() flash('New entry was successfully posted') return redirect(url_for('show_entries')) ~~~ 注意這里的用戶登入檢查( logged_in 鍵在會話中存在,并且為 True ) 安全提示 確保像上面例子中一樣,使用問號標記來構建 SQL 語句。否則,當你使用格式化字符串構建 SQL 語句時,你的應用容易遭受 SQL 注入。更多請見 [*在 Flask 中使用 SQLite 3*](#) 。 ### 登入和登出 這些函數用來讓用戶登入登出。登入通過與配置文件中的數據比較檢查用戶名和密碼,并設定會話中的 logged_in 鍵值。如果用戶成功登入,那么這個鍵值會被設為True ,并跳轉回 show_entries 頁。此外,會有消息閃現來提示用戶登入成功。如果發生一個錯誤,模板會通知,并提示重新登錄。 ~~~ @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) ~~~ 登出函數,做相反的事情,從會話中刪除 logged_in 鍵。我們這里使用了一個簡潔的方法:如果你使用字典的 [pop()](http://docs.python.org/dev/library/stdtypes.html#dict.pop "(在 Python v3.5)") [http://docs.python.org/dev/library/stdtypes.html#dict.pop] 方法并傳入第二個參數(默認),這個方法會從字典中刪除這個鍵,如果這個鍵不存在則什么都不做。這很有用,因為我們不需要檢查用戶是否已經登入。 ~~~ @app.route('/logout') def logout(): session.pop('logged_in', None) flash('You were logged out') return redirect(url_for('show_entries')) ~~~ 繼續 [*步驟 6: 模板*](#) 。 ? 版權所有 2013, Armin Ronacher.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看