国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

flask實踐:猜數(shù)字

2019-11-10 18:58:54
字體:
供稿:網(wǎng)友

作者:李輝 鏈接:https://zhuanlan.zhihu.com/p/23340992 來源:知乎 著作權(quán)歸作者所有。商業(yè) |-guess.html |-base.html 基模板 |-venv/ 虛擬環(huán)境 實現(xiàn)代碼

app.py

```# -*- coding: utf-8 -*-import randomfrom flask import Flask, render_template, Flash, redirect, url_for, sessionfrom flask_wtf import Formfrom wtforms import IntegerField, SubmitFieldfrom wtforms.validators import Required, NumberRangefrom flask_bootstrap import Bootstrapapp = Flask(__name__)app.config['SECRET_KEY'] = 'very hard to guess string' #設(shè)置secret keybootstrap = Bootstrap(app) # 初始化Flask-Bootstap擴展@app.route('/')def index(): # 生成一個0~1000的隨機數(shù),存儲到session變量里。 session['number'] = random.randint(0, 1000) session['times'] = 10 return render_template('index.html')@app.route('/guess', methods=['GET', 'POST'])def guess(): times = session['times'] # 從session變量里獲取次數(shù) # 從session變量里獲取在index函數(shù)里生成的隨機數(shù)字 result = session.get('number') form = GuessNumberForm() if form.validate_on_submit(): times -= 1 session['times'] = times # 更新次數(shù)值 if times == 0: flash(u'你輸啦……o(>﹏<)o') return redirect(url_for('.index')) answer = form.number.data if answer > result: flash(u'太大了!你還剩下%s次機會' % times) elif answer < result: flash(u'太小了!你還剩下%s次機會' % times) else: flash(u'啊哈,你贏了!V(^-^)V') return redirect(url_for('.index')) return render_template('guess.html', form=form)class GuessNumberForm(Form): number = IntegerField(u'輸入數(shù)字(0~1000):', validators=[ # 傳入驗證函數(shù)和相應(yīng)的錯誤提示信息。 Required(u'輸入一個有效的數(shù)字!'), NumberRange(0, 1000, u'請輸入0~1000以內(nèi)的數(shù)字!')]) submit = SubmitField(u'提交')if __name__ == '__main__': # 用于heroku部署,本地可省略 app.run()

index.html

{% extends "base.html" %}{% block page_content %}<!-- 傳入url_for的參數(shù)是視圖函數(shù)的名稱 --><a class="btn btn-success btn-lg" href="{{ url_for('guess') }}">開始游戲</a>{% endblock %}guess.html{% extends "base.html" %} <!-- 引入基模板 -->{% import "bootstrap/wtf.html" as wtf %}{% block page_content %} <!-- 使用Flask-Bootstrap提供的函數(shù)來生成默認(rèn)樣式的表單 --> {{ wtf.quick_form(form) }}{% endblock %}

完整的項目見源碼(底部)。

相關(guān)知識

session(會話) session是Flask的上下文(context)全局變量,可以用來存儲(用字典的形式)請求之間需要“記住”的值。在這個猜數(shù)字游戲里,我使用它來存儲生成的隨機數(shù)和剩余的機會次數(shù)。 要使用session,得先設(shè)置一個secret key,這用來給Cookie簽名以加密session,這樣做的效果是用戶可以看到cookie但不能篡改它。盡管如此,session并不是安全的,不能用來存儲密碼,這個視頻演示了一個破解session的過程:https://youtu.be/mhcnBTDLxCI。下圖是Cookie的信息:

更多細(xì)節(jié)見:http://flask.pocoo.org/docs/0.11/quickstart/#sessions

安裝和運行

源碼地址:https://github.com/helloflask/guess

下載或使用git命令克隆項目后,切換到程序根目錄。使用virtualenv創(chuàng)建一個虛擬環(huán)境,激活后使用pip安裝所需依賴:

pip install -r requirements.txt 然后運行:

set FLASK_APP=app.py flask run 訪問: http://127.0.0.1:5000/ 上面的代碼實現(xiàn)的效果:

稍微美化一下,變成了下面這樣:

源碼:https://github.com/helloflask/guess

Demo:http://guessguess.herokuapp.com/


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 通海县| 天台县| 怀柔区| 达孜县| 日照市| 疏附县| 广东省| 张家口市| 漯河市| 闻喜县| 三门峡市| 铁力市| 汶上县| 陇川县| 杭锦旗| 洪江市| 乌拉特后旗| 普陀区| 泸溪县| 金乡县| 临洮县| 安顺市| 饶平县| 晋中市| 百色市| 宣化县| 光山县| 白沙| 关岭| 英吉沙县| 东阳市| 神木县| 阳曲县| 澄迈县| 厦门市| 西吉县| 肃宁县| 元阳县| 调兵山市| 大名县| 慈利县|