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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

flask實(shí)踐:猜數(shù)字

2019-11-10 21:58:23
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

作者:李輝 鏈接:https://zhuanlan.zhihu.com/p/23340992 來(lái)源:知乎 著作權(quán)歸作者所有。商業(yè) |-guess.html |-base.html 基模板 |-venv/ 虛擬環(huán)境 實(shí)現(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擴(kuò)展@app.route('/')def index(): # 生成一個(gè)0~1000的隨機(jī)數(shù),存儲(chǔ)到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ù)里生成的隨機(jī)數(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次機(jī)會(huì)' % times) elif answer < result: flash(u'太小了!你還剩下%s次機(jī)會(huì)' % times) else: flash(u'啊哈,你贏(yíng)了!V(^-^)V') return redirect(url_for('.index')) return render_template('guess.html', form=form)class GuessNumberForm(Form): number = IntegerField(u'輸入數(shù)字(0~1000):', validators=[ # 傳入驗(yàn)證函數(shù)和相應(yīng)的錯(cuò)誤提示信息。 Required(u'輸入一個(gè)有效的數(shù)字!'), NumberRange(0, 1000, u'請(qǐng)輸入0~1000以?xún)?nèi)的數(shù)字!')]) submit = SubmitField(u'提交')if __name__ == '__main__': # 用于heroku部署,本地可省略 app.run()

index.html

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

完整的項(xiàng)目見(jiàn)源碼(底部)。

相關(guān)知識(shí)

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

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

安裝和運(yùn)行

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

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

pip install -r requirements.txt 然后運(yùn)行:

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

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

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

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


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 社旗县| 株洲县| 武安市| 盐城市| 大化| 保山市| 昌乐县| 德格县| 伊吾县| 承德县| 类乌齐县| 石渠县| 南平市| 崇文区| 资阳市| 曲阜市| 靖州| 绥中县| 益阳市| 搜索| 龙游县| 萨嘎县| 河东区| 若羌县| 永修县| 石楼县| 广宗县| 凯里市| 临夏市| 墨脱县| 金乡县| 灵丘县| 璧山县| 荥阳市| 洛南县| 乌拉特后旗| 丰原市| 正镶白旗| 大城县| 临城县| 揭西县|