Flask框架学习的整体内容
1.Flask基础
2.模板引擎
3.flask表单
4.文件上传
5.邮件发送
6.模型(model)
7.拆分MVT
8.项目的需求分析(博客)
9.Flask项目
10.flask部署
11.flask-resful
Flask web框架分为
MVC
M: 模型 (数据的操作)
V : 视图
C : 控制器
python中 MVT
M: 模型 (数据的操作)
V : 控制器
T: 视图
web 架构
B/S
浏览器/服务器
C/S
客户端/服务器
Flask模块
概述: flask是一个非常小的python web框架,被称为微型框架,只提供了一个强健的核心 ,其它功能都是通过第三方扩展库来实现的。
组成: 路由、模板、模型、控制器、wsgi系统、jinja2模板引擎
一、完整的运行
(1) 实例
from flask import Flask #导入Flask
app = Flask(__name__) #实例化flask类 __name__ 必传参数 当前执行的模块
#路由地址 请求当前的路由 127.0.0.1:5000
@app.route('/')
def index(): #执行请求的函数 控制器
return 'hello flask' #响应 响应一段字符串
if __name__ == '__main__': #执行的模块 只在主程序执行
app.run() #运行flask
(2) 路由地址
@app.route('/地址/')
def 函数名称([参数...]):
pass
请求地址为:
http://ip地址:端口号/地址/
(3) app.run参数
参数 | 参数说明 |
---|---|
debug | 是否开启调试模式 默认False 开启以后自动重新加载代码 |
threaded | 开启多线程 默认是不开启的 True |
host | 主机名 默认是127.0.0.1 在其它反问的时候 127.0.0.1-127.255.255.254 本地ip 0.0.0.0本地,网络都可以请求 |
port | 端口号 默认5000 |
实例:
if name == 'main': #执行的模块 只在主程序执行
app.run( host='0.0.0.0',port=5001,debug=True,threaded=True) #运行flask
http://10.0.121.138:5001/
http://127.0.0.1:5001/
二、视图函数
(1) 无参路由
@app.route('/')
def index():
pass
(2) 带一个参数的路由
#传递一个参数的路由
@app.route('/args/<page>/')
def args(page):
print(type(page))
return 'page的值为{}'.format(page)
注意: 路由值都为字符串类型
(3) 传递多个参数
#传递多个参数 类型1:
#http://127.0.0.1:5000/manyarg/1/2/
@app.route('/manyarg/<arg1>/<arg2>/')
def manyArg(arg1,arg2):
print(type(arg1),type(arg2))
return 'arg1的值为{} arg2的值为{}'.format(arg1,arg2)
#传递多个参数 类型2:
#http://127.0.0.1:5000/manyarg/1_2/
@app.route('/manyarg/<arg1>_<arg2>/')
def manyArg(arg1,arg2):
print(type(arg1),type(arg2))
return 'arg1的值为{} arg2的值为{}'.format(arg1,arg2)
#运行结果:arg1的值为1 arg2的值为2
(4) 限制参数的类型
- int
- string
- path
float
@app.route('/argtype/<int:arg>/') #只能传递整形 @app.route('/argtype/<string:arg>/') #字符串 默认就是字符串 @app.route('/argtype/<path:arg>/') #路径 将/不再认为是分隔符 而是值的一部分 其实也是字符串类型 @app.route('/argtype/<float:arg>/') #浮点形 def argType(arg): print(type(arg)) print(arg) return '参数类型'
注意:
- 路由地址末尾的‘/’ 建议都加上,如果在访问需要‘/’的路由的时候没有添加‘/’的话,浏览器会自动添加上‘/’
- 参数写在<>内,<>内的参数和前面的路由地址构造出一个全新的路由地址
- 参数类型默认为 string
三、响应 response
(1) 指定响应的状态码
实例
@app.route('/')
def index():
return '值',404 #code状态码 必须是标准库中的
(2) 通过make_response 构造响应(make_response)
#make_response 构造响应
@app.route('/response/')
def res():
# response = make_response('make_response构造响应')
response = make_response('make_response构造响应',500) #将响应的状态码 设置为 500
return response
四、重定向( url_for,redirect)
(1) redirect 的使用
redirect不带参数的跳转
@app.route('/')
def index():
return 'index'
@app.route('/login/')
def login():
return redirect('/') #参数为跳转的路由地址
redirect带参数的跳转
@app.route('/test/<arg1>/<arg2>/')
def test(arg1,arg2):
return 'test'
@app.route('/login/')
def login():
return redirect('/test/1/2/') #参数为跳转的路由地址
(2) url_for 根据 视图函数名称 反向构造出路由地址
@app.route('/'):
#不带参数
return url_for('index') # /
return url_for('indexx') #当前indexx视图函数不存在
#Could not build url for endpoint 'indexx'. Did you mean 'index' instead?
#带参数
return url_for('test',arg1=1,arg2=2) # /test/1/2/
return url_for('test',arg1=1,arg2=2)
# 如果 arg1和arg2是路由地址的参数 则拼凑的地址为 /test/1/2/ 如果不是则 /test/?arg1=1&arg2=2
(3) redirect和url_for的组合重定向
@app.route('/test/')
def test():
return redirect(url_for('index')) # 跳转到 首页视图 /
注意: 如果视图函数不存在则会报错
HTTP状态码所代表的含义
五、abort 抛出http标准状态码中的错误(abort)
@app.route('/test/')
def test2():
print('404')
abort(404)
注意: 类似raise 上面的代码正常执行 下面代码不再执行
捕获http状态码的错误
#捕获404状态码的错误
@app.errorhandler(404)
def page_not_found(e): #e为错误的信息
return '404-------{}'.format(e)
六、请求(request)
作用:
获取用户请求所带的数据
概述:
- 浏览器发送到服务器的所有请求被flask接收以后,创建出request对象,request对象用在视图函数中,用于获取请求的数据
- request对象由flask创建,想要获取请求数据,直接导入模块即可
request属性:
url 获取完整请求的url地址
print('获取完整请求的url地址',request.url)
base_url 去掉get传参的url
print('去掉get传参的url',request.base_url)
host_url 只有主机地址和端口号
print(' 只有主机地址和端口号',request.host_url)
path 请求的路由地址
print('请求的路由地址',request.path)
method 请求的方法
print('请求的方法',request.method)
args 请求的get传参
print(' 请求的get传参',request.args) print(' 请求的get传参',request.args['name'])#当返回的args中不存在name时报错 print(' 请求的get传参',request.args.get('name')) #当返回的args中不存在name时不报错 print(' 请求的get传参',request.args.getlist('name'))#args存在多个name时,该方法返回所有的name对应的值--列表
form 获取表单post传递过来的数据
print('获取完整请求的url地址',request.form)
files 文件上传
print('获取完整请求的url地址',request.files)
headers 获取请求的头信息 想要获取哪个 使用request.headers.get(key)进行获取
print('请求头信息',request.headers.get('User-Agent')) print('请求头信息',request.headers.get('Host'))
cookies 获取cookie
print('获取请求过来的cookie',request.cookies) print('获取请求过来的cookie',request.cookies.get('sessionid'))
json 获取请求过来的json数据
print('获取请求过来的json数据',request.json)
实例
@app.route('/')
def index():
print('获取完整请求的url地址',request.url)
print('去掉get传参的url',request.base_url)
print(' 只有主机地址和端口号',request.host_url)
print('请求的路由地址',request.path)
print('请求的方法',request.method)
print('请求的get传参',request.args)
print('请求的get传参',request.args['name'])
print('请求的get传参',request.args.get('name'))
print('请求的get传参',request.args.getlist('name'))
print('请求的get传参',request.args['age'])
print('请求的get传参',request.args.get('age'))
print(' 获取表单post传递过来的数据',request.form)
print('获取文件上传',request.files)
print('请求头信息',request.headers.get('User-Agent'))
print('请求头信息',request.headers.get('Host'))
print('获取请求过来的cookie',request.cookies)
print('获取请求过来的cookie',request.cookies.get('sessionid'))
print('获取请求过来的json数据',request.json)
return 'index'
评论 (0)