python3

Head First Python 读书笔记(三)

2018-07-07  本文已影响0人  icessun

第五章 :构建一个WEB应用

利用Flaskweb框架

安装Flask

使用这个命令去更新第三方的模块:py -3 -m pip install --upgrade 模块名字 或者py -3 -m pip install -U 模块的名字,这里--upgrade:就是更新的意思。

测试是否安装成功
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello()->str:
    return 'Hello world from Falsk!'
app.run()

编写一个测试文件hello_flask.py,如上;打开命令行窗口,输入命令,启动该文件:py -3 hello_flask.py

启动Flask应用
然后打开浏览器,输入上面的地址,注意观察命令行窗口的状态提示信息: 成功执行
代码解析
# 从flask 模块中导入 Flask函数   或者 这样 import flask  然后使用 flask.Flask 去调用这个模块里面的函数
from flask import Flask
# 创建一个Flask类型对象,并赋值给 app;
#里面的参数 (_ _name_ _)是两个下划线,代表着当前活动模块的名字;
#创建一个Flask类型对象的时候,需要知道__name__的当前值,所以必须传递
app=Flask(__name__)
print(__name__)  #  __main__
# URL 地址 ,前面的@是一个修饰符前缀,
# route是修饰符:将一个URL路径与一个函数关联;
#当一个指向 " / " url 的请求到达服务器,Flask就会去执行关联的hello函数,然后等待函数执行完的结果,返回给服务器
@app.route('/')  
def hello()->str:
    return 'Hello world from Falsk!'    # 向其调用者返回一个字符串

# 运行Flask的web服务器
app.run()
添加第二个页面

按照笔记二的做法,发布了模块vsearch,然后修改了hello_flask.py文件,如下:

# 向等待的Web浏览器返回任何结果之前,一定要通过str内置函数(BIF)将结果强制转换为一个字符串
from flask import Flask
from vsearch import search4letters
app = Flask(__name__)

# 第一个表单输入页面
@app.route('/')
def hello()->str:
    return 'Hello world from Falsk!'

# 第二个结果输出页面
@app.route('/search')
def do_search()->str:
    return str(search4letters('life ,the universe,and everything!', 'eivu,!'))

app.run()
运行结果
使用模板创建页面

利用模板引擎,可以应用面向对象的继承和重用概念来生成文本数据。

利用模板,可以将python代码(web应用的逻辑)和HTML页面(web应用用户界面)分离

Flask提供一个函数:render_template,传入指定的模板名字和所需要的参数,调用该函数就会返回一个HTML串;而且Flask还要求你的模板文件存储在一个templates的文件夹下面。这里使用Jinja2模板引擎。

from flask import Flask, render_template, request
from vsearch import search4letters
app = Flask(__name__)


@app.route('/search', methods=['POST', 'GET'])
def do_search()->'html':
    phrase = request.form['phrase']
    letters = request.form['letters']
    title = 'Here are your results:'
    results = str(search4letters(phrase, letters))
    return render_template('results.html', the_phrase=phrase, the_letters=letters, the_titles=title, the_results=results,)


@app.route('/')
@app.route('/entry')
def entry_page()->'html':
    return render_template('entry.html', the_title='Welcome to icessun plants')


# 打开调试模式
app.run(debug=True)

模板文件和样式文件应该和python文件都在一个文件目录下面:


目录结构
@app.route('/search', methods=['POST','GET'])
def do_search()->str:
    phrase = request.form['phrase']
    letters = request.form['letters']
    return str(search4letters(phrase, letters))
访问表单数据

上面的代码,我是直接把起始页面/entry页面合并在一起了(比较好,只有一次请求),也可以使用重定向302去做,这样有缺点:多了一次请求:

from flask import redirect
@app.route('/')
def hello()->'302':
        return redirect('/entry')
最后做成的WEB应用:
web应用首页 web应用结果页
部署到云PythonAnywhere
if __name__=='__main__':
      app.run(debug=True)
成功安装vsearch模块 解压zip文件

源代码地址:HeadFirstPython

上一篇下一篇

猜你喜欢

热点阅读