• Flask:基本结构


    python有两个比较出名的网络框架,一个是django,一个是flask. 之前的django文章里面介绍了django的各种用法,这个系列开始介绍flask的用法.相比与djangoflask更加简单,透明,flask没有django支持的那么多框架,比如admin等.但是也正是因为没有这么多的框架,因此flask更加适合自己DIY.下面就开始flask

    1初始化:

    所有flask程序都必须创建一个程序实例,web服务器使用WSGI的网关协议,把接收自客户端的所有请求都转交给这个对象处理.程序实例的创建代码如下。

    首先引用Flask,然后申请程序实例,也就是Flask类的对象。并且Flask的构造函数有一个必须指定的参数,也就是程序主模块或包的名字。在这里传入的是__name__

    from flask import Flask

    app = Flask(__name__)

    那么这个__name__到底是什么意思呢。我们平常在写python代码的时候,主文件的调用都会加上if __name__==”__main__”的语句。为什么会有这样的写法呢?我们来看一个例子,新建2个py文件,test.py,test1.py,在两个文件中分别添加代码print __name__,然后在test.py中引用test1 import test1. 此时运行test.py

    得到的结果如下

    test1

    __main__

    那么到这里我们基本能明白__name__的作用了,在被引用的模块中,__name__是模块文件名,在调用的文件中,__name__就是运行的文件名。如果test.py中没有引用test1.py直接运行test.py那么__name__就既是模块文件名也是运行的文件名。两者是相同的。

    介绍到这那么就明白__name__的作用了,它指定了程序的主模块或包的名字

    2 路由和视图函数

    客户端把请求发送给web服务器,web服务器再把请求发送给Flask程序实例,这样程序实例就知道了对每个URL请求应该运行那些代码。这也就是路由。在django中通过url(r'^index/',views.index)将URL地址和后端的views关联起来。那么来看下Flask是如何指定路由的呢。Flask中是通过app.route修饰器来将装饰的函数注册为路由。hello_world为处理程序。@app.route('/')的意思就是如果服务器的域名是www.example.com,那么如果在浏览器中访问www.example.com,那么出触发服务器执行hello_world函数。

    @app.route('/')

    def hello_world():

    return 'Hello World!'

     

    3 启动服务器

    既然实例已经初始化而且路由也指定好了。那么现在就应该启动服务器来运行了。通过app.run()来实际运行

    if __name__ == '__main__':

        app.run()

    运行后出现如下的打印。可以看到域名以及端口。

    /usr/bin/python2.7 /home/zhf/py_prj/flask_prj/flask_prj.py

     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

    在浏览器中执行http://127.0.0.1:5000/后,浏览器会打印Hello World!.

    在这个实例中,host地址是127.0.0.1, 默认端口是5000,这个启动的是本地服务器。如果我们想部署自己的IP和端口的话该如何实现呢,如下所示,通过指定host和端口的值就可以改变服务器地址和端口了。

    if __name__ == '__main__':

    app.run(host='192.168.0.12',port=8000)

    4 请求函数以及响应

    在浏览器中经常会传递参数,在django中通过在处理函数中传入request参数来获取。Flask中也是大同小异。

    from flask import request

    @app.route('/')

    def hello_world():

        user_agent=request.headers.get('User-Agent')

        return user_agent

    上面的代码中通过return user_agent将数据返回到浏览器上。返回的时候还还可以返回HTML的形式。比如return ‘<h1>user_agent</h1>’. 也可以返回这种形式return ‘<h1>bad request</h1>’,400. 这里返回一个400状态码表示请求无效。

    如果不想返回由1个,2个或多个组成的元组。 Flask视图函数可以返回response对象,make_response函数接收1个,2个或3个参数。并返回一个response对象。通过这个response对象,我们可以在上面调用各种方法,进一步设置响应,比如设置cookie

    运行后浏览器中显示

    This document carries a cookie!

    在浏览器中可以看到设置的cookie

    5 Flask扩展

    Flask的开发web服务器支持很多启动设置选项。但只能在脚本中作为参数传给app.run()。但这种方式并不方便。传递设置选项的理想方式使用命令行参数。Flask-Script是一个Flask扩展。为Flask程序添加了一个命令行解析器。代码修改如下:

    from flask import Flask

    from flask import request

    from flask import make_response

    from flask_script import Manager

    app = Flask(__name__)

    if __name__ == '__main__':

        manager=Manager(app)

        manager.run()

    这样修改后,程序可以使用一组基本命令行选项,现在运行flask_prj.py,会显示一个用法消息。

    runserver命令用来启动web服务器,运行python flask_prj.py runserver将启动服务器,而--help参数将显示如何传递参数

    通过这种方式就可以在命令行中指定地址和端口了

    zhf@zhf-maple:~/py_prj/flask_prj$ python flask_prj.py runserver --host 127.0.0 --port 8000

     * Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)

  • 相关阅读:
    学习笔记 MYSQL报错注入(count()、rand()、group by)
    学习笔记 HTTP参数污染注入
    学习笔记 MSSQL显错手工注入
    代码审计入门后审计技巧
    字符串的排列
    二叉搜索树与双向链表
    复杂链表的复制
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列
    从上往下打印二叉树
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/8397774.html
Copyright © 2020-2023  润新知