Python全栈: 入门Flask框架

Python全栈: 入门Flask框架文章目录 1 什么是 Fask 框架 2 安装 Flask3 第一个 Flask 程序 4MTV 模型介绍 6 启动选项及调试启动服务器开启调试模式 7Flask 的扩展 8URL 及 HTTP 基础知识 URL 介绍常见的 HTTP 请求方式 HTTP 常见状态码 9U

大家好,欢迎来到IT知识分享网。

1 什么是Fask框架?

  • Python实现的Web开发微框架
  • 小而美,丰富的周边扩展

image-20210131194819221

  • 轻松掌握
  • 灵活扩展
  • 免费开源

使用Fask搭建的网站

image-20210131194947955

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 
  • 验证

image-20210131195639470

  • 使用虚拟环境安装
    • 使用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模型介绍

image-20210131202253588

  • 模型 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服务器

image-20210131203111929

指定端口号:

image-20210131203447701

可以以以下三种方式访问:

  • 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

image-20210131203759303

image-20210131203905698

提示:切勿在生产环境下开启调试模式

7 Flask的扩展

扩展 — Flask 中文文档( 1.1.1 ) (dormousehole.readthedocs.io)

image-20210131204902176

Search results · PyPI

image-20210131204918373

什么是扩展?

为 Flask应用增加功能的包

有哪些常用的Flask扩展?

image-20210131204500194

如何使用Fask扩展?

一搜——不要重复发明轮子

二看——查看文档、源码库

三用——对照文档使用

8 URL及HTTP基础知识

URL介绍

  • URL是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址
  • 互联网上的每个文件都有一个唯一的URL
  • 基本∪RL包含模式(或称协议)、服务器名称(或IP地址)路径和文件名

    image-20210131205720976

例子:

image-20210131205807013

URL协议

  • http——超文本传输协议资源
  • https——用安全套接字层传送的超文本传输协议
  • ftp——文件传输协议

常见的HTTP请求方式

  • GET请求
    • 可以用浏览器直接访问
    • 请求可以携带参数,但是有长度限制
    • 请求参数直接放在URL后面
  • POST请求
    • 不能使用浏览器直接访问
    • 对请求参数的长度没有限制
    • 可以用来上传文件等需求

HTTP常见状态码

  • 2XX请求成功
  • 3XX重定向
  • 4XX请求错误
  • 5XX服务器错误

HTTP状态码_百度百科 (baidu.com)

image-20210131211053048

9 URL配置及路由

PyCharm配置

image-20210131212219336

image-20210131212443873

路由配置

  • 方式一:使用装饰器
    • @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>')
    • image-20210131213244496

image-20210131213418270

视图函数中获取页面传值

  • URL中的值
    @app.route('/user/<page>') def list_user(page): return '您好,你是第{}页用户'.format(page) 

    image-20210131213746585

  • URL中的值为可选
    @app.route('/user/') @app.route('/user/<page>') def list_user(page=1): return '您好,你是第{}页用户'.format(page) 

    image-20210131213938959

10 Flask请求和响应

image-20210131214140624

请求分派:

image-20210131214302036

上下文对象:

  • 应用上下文
  • 请求上下文
  • 在分派请求之前激活应用上下文和请求上下文
  • 在请求处理完成后将其删除

应用上下文对象

  • current_app

    当前应用的实例

  • g

    处理请求时的临时存储对象,每次请求都会重设这个变量

请求上下文对象

  • request
    • 请求对象,封装了客户端发出的HTTP请求中的内容
  • session
    • 用户会话(dict),各请求之间的数据共享

session用户会话

image-20210131215142628

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' 

image-20210131220127944

image-20210131220133975

  • 获取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目录下)

image-20210131222607044

<!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 

image-20210131222802028

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

(0)
上一篇 2025-10-11 18:10
下一篇 2025-10-11 18:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信