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
网友评论