美文网首页python3
Head First Python 读书笔记(三)

Head First Python 读书笔记(三)

作者: icessun | 来源:发表于2018-07-07 21:32 被阅读0次

    第五章 :构建一个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应用结果页
    部署到云PythonAnywhere
    • 根据环境去选择的执行代码
      就是说,你在本地和在远程上面执行都使用一套代码,不需要两套。
    if __name__=='__main__':
          app.run(debug=True)
    
    • 第一步:打包你要上传的源代码
    • 第二步:登录PythonAnywhere网站注册
    • 第三步:点击File页签,上传源代码
    • 第四步:
    成功安装vsearch模块 解压zip文件

    源代码地址:HeadFirstPython

    相关文章

      网友评论

        本文标题:Head First Python 读书笔记(三)

        本文链接:https://www.haomeiwen.com/subject/fhpyuftx.html