Head First Python 读书笔记(三)

第五章 :构建一个WEB应用

利用Flaskweb框架
安装Flask
  • 使用pip命令
    打开命令行提示窗口,输入如下命令(注意大小写,Windows下):py -3 -m pip install flask
    下载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模板引擎。

  • 修改后的hello_flask.py文件
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文件都在一个文件目录下面:
目录结构
- http方法

  • get:浏览器从web服务器请求一个资源
  • post:浏览器通过http向服务器发送数据,与form标记紧密相连

    • 让你的URL支持get和post方法,只需要在route修饰符中加入对应的方法即可,最好是和你表单数据提交到服务器上面是一样的
@app.route('/search', methods=['POST','GET'])
  • Flask 获取HTML的表单数据
    通过其内置对象request,访问表单所对应的name属性:
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应用结果页

源代码地址:HeadFirstPython

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值