Flask入门

作者: 以我丶之姓 | 来源:发表于2018-05-22 22:31 被阅读0次

WEB工作原理

1.C/S和B/S架构
2.B/S架构工作原理
客户端(浏览器)《=》WEB服务器(Apache,nginx)《=》WSGI《=》Python(Flask)

一、Flask框架

1.简介
Flask是一个非常小的python web框架,被称为微型框架,只提供了一个强健的核心。其他的功能都是通过拓展来实现的(所以会使用很多的扩展模块)。
2.组成
1.调试、路由、WSGI
2.模板引擎
3.安装
pip install flask
4.路由配置

@app.route('/')
def index():
#视图函数
pass

5.完整代码

# coding=utf-8
#导入flask
from flask import Flask
#创建flask实例
app = Flask(__name__)

#配置路由
@app.route('/')
def index():
    return '我是首页'

if __name__ == '__main__':
    app.run()

调试 127.0.0.1:5000

6.启动参数

参数 说明
debug 是否开启调试模式 True\False 默认为False 如果开启会自动加载代码
port 指定端口号
host 指定主机名 设置为0.0.0
threaded 是否开启多线程,默认False

app.run(debug=True, threaded=True, port=5050, host='0.0.0.0')

7.请求与响应

变量或对象 说明
current_app 当前运行的应用的实例
g 处理请求的临时变量 每次请求都会重置
request 请求对象 保存客户端的所有 HTTP请求的信息
session 会话控制 用于存储会话信息

app对象
全局应用对象
作用:公共的全局配置,可以加在这个对象上

#给全局对象 添加一个属性
app.good = 'goods'

current_app
在任何的视图中,可以使用current_app访问到全局的app对象
作用:公共的配置,都写在app对象上,可以在所有的视图中,通过current_app访问到全局对象app

from flask import current_app
@app.route('/globalapp/')
def globalapp():
    return '%s 获取全局good属性值通过current_app'%current_app.good

request
作用:获取请求报文中的数据
概述:
1.浏览器发送到服务器中的所有报文被flask接收后,它会创建出request对象,request对象被用在视图函数中,去获取请求的数据。
2.request对象由flask创建好以后引入就可以使用
3.导入
from flask import request
request属性:
1.url 获取完整的请求url
2.base_url 获取去掉GET参数的url
3.host_url 获取的只有主机IP和端口号
4.path 获取路由地址
5.method 获取请求的方式
6.remote_addr 获取客户端的ip地址
7.args 获取get请求的参数

print(request.args['name'])#获取参数
print(request.args.get('age'))#通过get方法获取参数

8.form 存储表单的数据
9.file 用于文件上传
10.headers 获取请求头信息

print(request.headers['User-Agent'])

11.cookies 获取cookie
获取get参数
url = 'http://127.0.0.1:5000/request/?a=xxx&b=19'

print(request.args.get('a'))
print(request.args.get('b'))

获取get参数
url = 'http://127.0.0.1:5000/request/?a=xxx&a=19'

print(request.args.get('a'))
print(request.args.getlist('a'))

二、路由设置

(1)无参路由

@app.route('/test/')
def test():
  return '测试无参路由'

注意:路由的地址,可以和视图函数的名称不一致

(2)有参路由

@app.route('/welcome/<name>')
def welcome(name):
    print('欢迎%s'%name)
    return '欢迎%s'%name

(3)路由的参数的限定

@app.route('/welcome2/<int:arg>')
@app.route('/welcome2/<float:arg>')
@app.route('/welcome2/<path:arg>')
@app.route('/welcome2/<string:arg>')#默认
def welcome2(arg):
    print(arg)
    print(type(arg))
    return '参数类型约定'

注意事项
1.路由末尾的 / 建议都加上,因为在路由需要 / 的时候,浏览器会帮我们自动加上,也就是说,在输入的时候 / 就可加可不加了。
2.若需要制定参数,将参数名称写在<>中,视图函数的参数和路由的参数保持一致。
3.若要限定参数的类型,在<>中写上<int/float/string/path:参数名称>
4.不指定类型 默认为string类型,如果使用path的话,那么这条 / 不再是路由的分隔符,而是代表路径的返回。

三、路由的响应(response)

(1)响应状态码404(但请求是成功的)

@app.route('/res/')
def res():
    return 'Page not found',404#改变返回的状态码值,其实请求的成功的。

(2)通过make_response构造响应

导入:

from  flask import make_response
@app.route('/res/')
def res():
    # response = make_response('Page not fount',404)#弹出响应结果,改变HTTP状态码
    response = make_response('Page not fount')#弹出响应结果
return response

四、重定向(redirect)

作用:可以在视图中直接去跳转
导入:
from flask import redirect
实例:

@app.route('/r_redirect/')
def r_redirect():
    return redirect('/test/')#参数是路由名称
return url_for('t')#通过视图函数 反向构造出路由
return url_for('t', a=1, b=2) #通过视图函数 反向构造处路由和参数,关键字为参数名
return redirect(url_for('welcome2', arg=1)) #重定向 带参数

五、abort(终止)

  • 如果视图处理中,出现了异常错误,可以使用abort函数立即终止视图函数的执行
  • 如果abort函数被触发,后面的代码或者程序就不再执行,类似于python的raise
  • 通过abort函数,可以向前端(浏览器端)返回一个 http标准中的状态码,表示出错误的信息,如果想浏览器返回一个不存在的http的状态码是没有任何意义的。
    示例:
@app.route('/')
def index

相关文章

网友评论

    本文标题:Flask入门

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