大家好,欢迎来到IT知识分享网。
文章目录
1 什么是Fask框架?
- Python实现的Web开发微框架
- 小而美,丰富的周边扩展
- 轻松掌握
- 灵活扩展
- 免费开源
使用Fask搭建的网站
2 安装Flask
- 使用pip命令安装
pip install flask # 修改超时 pip install flask --timeout=99999 # 修改源 pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple/
- 源码安装
python setup.py install
- 验证
- 使用虚拟环境安装
- 使用virtualenv
- 使用pipenv
3 第一个Flask程序
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run()
- 参数
__name__
表示Fask应用的主模块或包的名称。Flask使用该参数确定应用的位置,然后找到应用中其他文件的位置,如网页中的图片目录,模板目录
找其他文件Fask()括号中参数需要填其他内容
- 装饰器
@app.route('/')
表示一个路由配置,即:用户在浏览器输入URL,使用对应的函数处理其中的业务逻辑(可写多个)
4 MTV模型介绍
- 模型 Model
Flask-PyMongo/Flask-Mongokit
Flask-SQLAlchemy
- 视图View
Flask-WTF/bootstrap-flask/Flask-Uploads
- 模板 Template
Jinja2
6 启动选项及调试
启动服务器
- 步骤1:设置环境变量
Windows:set FLASK_APP=app.py
*inux: export FLASK_APP=app.py
- 步骤2:flask run启动内置web服务器
指定端口号:
可以以以下三种方式访问:
127.0.0.1:8001
localhost:8001
IP地址:8001
开启调试模式
方式一:
- 直接执行app.py(v1.0以前)
- 步骤1:在文件中添加启动代码
if __name__ == '__main__': app.run(debug=True)
- 步骤2:python app.py
方式二:
- 代码修改后服务器自动重启
- 步骤1:设置环境变量
Windows:set FLASK_ENV=development
*inux:export FLASK_ENV=development
提示:切勿在生产环境下开启调试模式
7 Flask的扩展
扩展 — Flask 中文文档( 1.1.1 ) (dormousehole.readthedocs.io)
Search results · PyPI
什么是扩展?
为 Flask应用增加功能的包
有哪些常用的Flask扩展?
如何使用Fask扩展?
一搜——不要重复发明轮子
二看——查看文档、源码库
三用——对照文档使用
8 URL及HTTP基础知识
URL介绍
- URL是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址
- 互联网上的每个文件都有一个唯一的URL
- 基本∪RL包含模式(或称协议)、服务器名称(或IP地址)路径和文件名
例子:
URL协议
- http——超文本传输协议资源
- https——用安全套接字层传送的超文本传输协议
- ftp——文件传输协议
常见的HTTP请求方式
- GET请求
- 可以用浏览器直接访问
- 请求可以携带参数,但是有长度限制
- 请求参数直接放在URL后面
- POST请求
- 不能使用浏览器直接访问
- 对请求参数的长度没有限制
- 可以用来上传文件等需求
HTTP常见状态码
- 2XX请求成功
- 3XX重定向
- 4XX请求错误
- 5XX服务器错误
HTTP状态码_百度百科 (baidu.com)
9 URL配置及路由
PyCharm配置
路由配置
- 方式一:使用装饰器
- @app.route(url_name,methods)
- url:匹配的URL地址
- methods:所支持的请求方式([‘GET’,‘POST’])
- 示例:@app.route(’/login’,methods=[‘GET’,‘POST’])
- 方式二:使用AP配置
- app.add_url_rule(url,url_name,view_name)
- url:匹配的URL地址
- url_name:给URL的命名
- view_name:视图函数
- 示例:
-
def hello_world(): return 'Hello World!,ok sucess' app.add_url_rule('/home', 'home', hello_world)
路由匹配规则:
- 匹配整个文字
@app.route('/hello')
- 传递参数
@app.route(’/user/<username>')
- 指定参数类型
@app.route('/post/<int:post_id>')
视图函数中获取页面传值
- URL中的值
@app.route('/user/<page>') def list_user(page): return '您好,你是第{}页用户'.format(page)
- URL中的值为可选
@app.route('/user/') @app.route('/user/<page>') def list_user(page=1): return '您好,你是第{}页用户'.format(page)
10 Flask请求和响应
请求分派:
上下文对象:
- 应用上下文
- 请求上下文
- 在分派请求之前激活应用上下文和请求上下文
- 在请求处理完成后将其删除
应用上下文对象
- current_app
当前应用的实例
- g
处理请求时的临时存储对象,每次请求都会重设这个变量
请求上下文对象
- request
- 请求对象,封装了客户端发出的HTTP请求中的内容
- session
- 用户会话(dict),各请求之间的数据共享
session用户会话
11 Flask请求报文
请求报文常用参数:
- method:请求的类型(GET/POST/OPTIONS等)
- form:POST请求数据dict
- args:GET请求数据dict
- values:POST请求和GET请求数据集合dict
- files;:上传的文件数据dict
- cookies:请求中的 cookie dict
- headers:HTTP请求头
- 获取GET参数
from flask import request @app.route('/test/req') def test_request(): """ 请求报文练习 """ get_args = request.args print(get_args) page = request.args.get('page') print(page) return 'request sucess'
- 获取IP地址
@app.route('/test/req') def test_request(): """ 请求报文练习 """ get_args = request.args print(get_args) # 页码一定是整数 page = request.args.get('page', 1) print(page) # 获取服务器所在的主机地址 headers = request.headers print(headers) print(headers.get('host')) # 获取ip地址 ip = request.remote_addr print('客户端访问地址:',ip) # 获取User-agent user_agent = request.headers.get('user-agent', None) print('User-agent:',user_agent) return 'request sucess'
- 请求钩子
使用钩子函数可以减少重复代码的编写,便于维护
before first request
服务器初始化后第一个请求到达前执行
before request
每一个请求到达前执行after_request
每次请求处理完成后执行,如果请求过程中产生了异常,则不执行
teardown_request
每次请求处理完成之后执行,如果请求过程中产生了异常也执行
@app.before_first_request def first_request(): """ 服务器启动后第一个请求到达""" print('first_request') @app.before_request def per_request(): """ 每一个请求到达前""" print('before request')
12 Flask响应报文
- 可以是字符串
- 可以是元组(tuple)
(response,status,headers)
或
(response,headers)
- 响应元组
<1> response—响应内容
<2> status—响应状态码
<3> headers响应头信息
@app.route('/test/resp') def test_response(): """ 测试响应 """ return 'response sucess', 201, {
'user_id':'my_user_id' }
- 使用 make response代替
from flask import make_response @app.route('/test/resp') def test_response(): """ 测试响应 """ # 构造一个响应对象 # resp = make_response('这是一个响应对象', 403,{
# 'token':'abc123' # }) # resp.headers['user_id'] = 'myid_123' # resp.status_code = 200 # 响应html
html = "<html><body><h1 style='color:#ff0000'>HTML文本显示</h1></body></html>" resp = make_response(html) return resp
- 响应模板文件(必须在app.py同级目录的templates目录下)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1 style="color:#f00">HTML 文本显示,从文件读取</h1> </body> </html>
@app.route('/test/html') def test_html(): """ 从文件响应 """
html = render_template('index.html') resp = make_response(html, 201) return resp
13 Flask重定向等内部视图
- redirect() 实现重定向
from flask import redirect @app.route('/') def hello_world(): """ 视图函数 """ # 访问 / 时重定向到 /index 这个页面 return redirect('/index')
- abort() 处理错误
from flask import abort @app.route('/') def hello_world(): """ 视图函数 """ abort(403) @app.errorhandler(403) def forbidden_page(err): """ 你没有权限访问的页面""" print(err) return '您没有权限访问,请联系管理员开通'
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/123098.html