Flask笔记(1)--简单的flask

来源:互联网 发布:qq飞车莱瑟xa数据 编辑:程序博客网 时间:2024/06/05 19:33

1. 简单的Flask程序

示例

flask项目的基本目录结构:flask项目名    |_____static        #静态文件的存放目录    |_____templates     #模板的存放目录    |_____项目名.py      #主项目    |_____config.py     #配置文件
#例:#项目名.pyfrom flask import Flaskapp = Flask(__name__)   #app是程序实例,一个项目只能有一个程序实例@app.route('/')         #路由装饰器def hello_world():      #视图函数    return 'Hello World!'if __name__ == '__main__':    app.run()           #有个host参数,代表监听范围,默认为127.0.0.1,只监听本机,0.0.0.0表示监听所有公网ip

​ @app.route()装饰器,可以将函数变为视图函数,他的参数为路由。

使用Flask-Script支持命令行选项

​ flask的开发web服务器支持很多选项,但只能在脚本中作为参数传给app.run()函数,然而传递设置选项的理想方式是使用命令行参数。Flask-Script是一个Flask的扩展,为Flask程序添加了一个命令行解析器。

#安装:pip install flask-script#hello.pyfrom flask import Flaskfrom flask_script import Managerapp = Flask(__name__)   manager = Manager(app)              #实例化拓展@app.route('/')         def hello_world():          return 'Hello World!'if __name__ == '__main__':    manager.run()               启动实例

​ 修改代码后,使用命令行启动程序(python hello.py runserver)时就可以添加参数了: –host/-h 客户端访问web服务的ip

​ –port/-p web服务的端口

​ -d 开启debug

​ -r 自动reload,当代码发生变化时自动重启

​ –threaded 开启多线程

​ -?/–help 查看帮助信息

使用配置文件

​ 将工程配置下写在配置文件中,利于以后的开发维护管理。

#config.pyDEBUG = True    #设置工程为开发者'''其他配置参数,如数据库的配置等等'''#工程文件import configapp.config.from_objec(config)   #将配置文件配置到项目文件中

路由

  • 路由传递参数:app.route('/index/\<arg1>')

    ​ 参数放在尖括号里,可以设置参数的类型,int, float,path(/将不再是路径分隔符),如:\<int:arg1>,

  • url重定向:redirect('\<跳转的路由>')

  • 解析路由:url_for(视图函数名),在模板中页面跳转也可以使用url_for()解析得到路由,放在{{ }}

@app.route('/index/')       #普通路由def index():    return 'hello world'@app.route('/add/<int:arg1>/<int:arg2>') #带参数的路由def add(ag1, arg2):    return 'arg1 +arg2 = {}'.format(arg1+arg2)@app.route('/hello')def hello():    return rendirect(url_for('index'))   #路由重定向和重定向一起使用

2. 请求与响应

Flask上下文全局变量

变量名 上下文 说明 current_app 程序上下文 当前激活程序的程序实例 g 程序上下文 处理请求时用作临时存储的对象,每次请求都会重设这个变量。 request 请求上下文 请求对象,封装了客户端发送的HTTP请求中的内容 session 请求上下文 用户会话,用于存储请求之间需要记住的值的词典

​ Flask在分发请求之前激活(或推送)程序和请求上下文,请求处理完成后再将其删除。程序上下文被推送后,就可以在线程中使用current_app和g变量。类似地,请求上下文被推送后,就可以使用request和session变量。如果使用这些变量时我们没有激活程序上下文或请求上下文,就会导致报错。

request:请求对象

​ 封装了客户端发送的HTTP请求中的内容。

​ request.headers 请求头信息,数据类型为类字典结构,可以使用.get(”)获取数据。

#例:@app.route('/request/')def req():    # 完整的请求URL    #return request.url    # 基本路由信息,不包含get参数    #return request.base_url    # 只包含主机和端口    #return request.host_url    # 只包含装饰器中的路由地址    #return request.path    # 请求方法类型    #return request.method    # 客户端IP地址    #return request.remote_addr    # 所有的请求参数(GET)    #return request.args['page']    # 请求头信息    return request.headers['User-Agent']

response:响应对象

​ 响应的两种方法:

  • 视图函数直接返回一个元组:(response, status, headers)

  • 视图函数返回一个make_response(键,值)函数产生的响应对象。

Cookies:

  • 访问:通过请求对象的cookies属性访问(请求对象的cookies属性是一个内容为客户端提提交的所有cookies的字典)

  • 设置cookies:通过响应对象的set_cookies方法来设置Cookies。

from flask import Flask, request, make_response@app.route('/cookies/')def cookies():    cook = request.cookies      #获得cookies    resp = make_response('set cookies')     #实例一个响应对象    resp.set_cookies('name','Tom')      #设置cookies    return resp

session:

  • 设置session
#设置秘钥:使用session就必须设置密码,以便用来对数据加密app.config['SECRET_KEY'] = '随便什么字符串'@app.route('/set_sesion/')def set_session():    session['user-name'] = 'hello'    return '设置成功'
  • 获取session
@app.route('/get_session/')def get_session():    return session.get('username', 'who?')

请求钩子

​ 4种钩子装饰器:

before_first_request:在处理第一个请求之前执行before_request:在每次请求之前运行。after_request:如果没有未处理的异常抛出在,在每次请求之后执行teardown_request:即使有未处理的异常抛出,也在每次请求之后运行。
原创粉丝点击