Flask阶段(一)代码

简介: Flask阶段(一)代码

1.helloworld.py

1#1.从flask模块导入了Flask类
 2from flask import Flask
 3
 4#2.创建flask对象
 5#参数1: __name__,如果从当前文件启动,那么值是__main__, 如果是从其他模块调用运行的那么值是模块的名字
 6#参数2: static_url_path,表示静态资源的访问地址, /static
 7#参数3: static_folder, 用来存储静态资源的,默认名字是static
 8#参数4: template_folder, 模板文件夹,默认的值是templates
 9app = Flask(__name__)
10print(__name__)
11print(app.static_url_path)
12print(app.static_folder)
13print(app.template_folder)
14
15#使用app,通过路由绑定一个视图函数
16#注意点: 视图函数一定要有返回值
17@app.route('/')
18def hello_world():
19    return "hello world Flask"
20
21#判断是否直接使用当前模块运行程序
22if __name__ == '__main__':
23    #运行app程序
24    app.run()

2.url_map.py

1"""
 2五,查看哪些路由(地址)可以访问
 3- 格式: 使用app.url_map, 返回的是app装饰的所有的路由和路径之间的映射关系
 4- 注意点: 只有被app.url_map包含进来的路由(地址)才能被访问
 5
 6"""
 7
 8from flask import Flask
 9
10#创建flask对象
11app = Flask(__name__)
12
13#绑定路由和视图函数之间的映射关系
14@app.route('/')
15def index():
16
17    return "<h1>this is index</h1>"
18
19@app.route('/haha')
20def index2():
21
22    return "this is index2"
23
24#启动app
25if __name__ == '__main__':
26    print(app.url_map)
27    app.run()

3.apprun.py

1from flask import Flask
 2
 3app = Flask(__name__)
 4
 5@app.route('/haha')
 6def hello_world():
 7
 8    #print(1/0)
 9
10    return "<h1>helloworld</h1>"
11
12if __name__ == '__main__':
13
14    app.run(host="127.0.0.1",port=5001,debug=True)

4.dynamic_params.py

1"""
 2在访问路由的时候指定参数
 3
 4- 格式: @app.route("/<类型:变量名>")
 5- 常见的参数类型
 6  - 整数            int
 7  - 小数        float
 8  - 字符串      path(默认就是path)
 9"""
10from flask import Flask
11
12app = Flask(__name__)
13
14#接收一个整数
15@app.route('/<int:number>')
16def get_intnumber(number):
17
18    return "the int is %s"%number
19
20#接收一个小数
21@app.route('/<float:number>')
22def get_floatnumber(number):
23
24    return "the float is %s"%number
25
26#接收一个字符串
27@app.route('/<path:number>')
28def get_pathnumber(number):
29
30    return "the path is %s"%number
31
32
33
34if __name__ == '__main__':
35    app.run(debug=True)

5.custom_converter.py

1"""
 2八,自定义参数类型(自定义转换器)
 3
 4- 背景:
 5  - 如果系统提供的int,float,等参数类型满足不了需求的时候,我们需要自定义
 6  - 之所以,int,float,path可以接收不同的数据类型,是因为,系统已经提供好对应的转换器了
 7- 自定义转换器格式
 8  - 1.定义类,继承自BaseConverter
 9  - 2.重写init方法
10  - 3.初始化父类成员变量, 还有子类自己的规则
11  - 4.将转换器类,添加到系统默认的转换器列表中
12
13  需求: 接收三位整数
14
15"""
16from flask import Flask
17from werkzeug.routing import BaseConverter
18
19app = Flask(__name__)
20
21
22# - 1.定义类,继承自BaseConverter
23class MyRegexConverter(BaseConverter):
24    #这样直接指定规则,不够灵活,具体应该匹配什么规则应该交给路由
25    # regex = "\d{3}"
26
27    # - 2.重写init方法,接收两个参数
28    def __init__(self,map,regex):
29        # - 3.初始化父类成员变量, 还有子类自己的规则
30        super(MyRegexConverter, self).__init__(map)
31        self.regex = regex
32
33# - 4.将转换器类,添加到系统默认的转换器列表中
34app.url_map.converters["re"] = MyRegexConverter
35
36#打印输出所有的系统转换器列表
37print(app.url_map.converters)
38
39#匹配三位整数
40#使用re('规则'),实际上是传递了两个参数,参数1: app.url_map,  参数2:括号中写的正则规则
41@app.route('/<re("\d{3}"):number>')
42def hello_world(number):
43
44    return "the three number is %s"%number
45
46#匹配四位整数
47@app.route('/<re("\d{4}"):number>')
48def get_four_number(number):
49
50    return "the four number is %s"%number
51
52#匹配一个手机号
53@app.route('/<re("1[3-9]\d{9}"):phone>')
54def get_phone_number(phone):
55
56    return "the phone number is %s"%phone
57
58if __name__ == '__main__':
59    app.run(debug=True)

6.methods.py

1"""
 2九,给路由增加其他的访问方式
 3
 4- 格式: @app.route('路径',methods=['请求方式1','请求方式2',....])
 5- 常见的请求方式:
 6  - GET,POST,PUT,DELETE
 7
 8"""
 9from flask import Flask
10
11app = Flask(__name__)
12
13@app.route('/',methods=["POST","GET"])
14def hello_world():
15
16    return "helloworld"
17
18if __name__ == '__main__':
19    print(app.url_map)
20    app.run(debug=True)

7.return_reponse.py

1"""
 2返回响应(字符串)
 3
 4- 1.直接返回响应体数据
 5  - return '字符串'
 6- 2.直接返回响应体数据+状态码
 7  - return '字符串',转台码
 8- 3.直接返回响应体数据+状态码+响应头信息
 9  - return '字符串',转台码,{'key':'value'}
10
11"""
12from flask import Flask
13
14app = Flask(__name__)
15
16@app.route('/')
17def hello_world():
18
19    # - 1.直接返回响应体数据
20    #     return 'helloworld'
21
22    # - 2.直接返回响应体数据+状态码
23    #     return 'helloworld',666
24    #     return 'helloworld',"666 BIGERROR"
25
26    # - 3.直接返回响应体数据+状态码+响应头信息
27        return 'helloworld',200,{"Content-Type":"application/json","name":"banzhang"}
28
29
30if __name__ == '__main__':
31    app.run(debug=True)

8.jsonify.py

1"""
 2十一,通过jsonify返回json数据
 3
 4- 格式: jsonify(dict)
 5- 简化格式: jsonify(key=value,key2=value2)
 6
 7自动导入包: alt+ enter, 再次选择导入
 8"""
 9from flask import Flask, jsonify
10
11app = Flask(__name__)
12
13@app.route('/')
14def hello_world():
15
16    #1.定义字典
17    dict = {
18        "name":"banzhang",
19        "age":29
20    }
21    #2.返回json数据
22    # return jsonify(dict)
23
24    #3.返回json数据简化格式
25    return jsonify(name='laowang',age=29)
26
27if __name__ == '__main__':
28    app.run(debug=True)

9.redirecy.py

1from flask import Flask, redirect
 2
 3app = Flask(__name__)
 4
 5@app.route('/banzhang')
 6def banzhang():
 7
 8    return redirect("/fubanzhang")
 9
10
11@app.route('/fubanzhang')
12def fubanzhang():
13
14    return "我是富班长,我有钱"
15
16
17
18if __name__ == '__main__':
19    app.run(debug=True)

10.redirect_practice.py

1from flask import Flask, redirect
 2
 3app = Flask(__name__)
 4
 5@app.route('/jingdong')
 6def jingdong():
 7
 8    #跳转到淘宝去
 9    return redirect("http://www.taobao.com")
10
11if __name__ == '__main__':
12    app.run(debug=True)

11.url_for.py

1"""
 2十三,url_for
 3
 4- 解释: 称为反解析,返回的是视图函数对应的路由地址
 5- 格式: url_for('视图函数',key=value)
 6
 7"""
 8from flask import Flask, url_for, redirect
 9
10app = Flask(__name__)
11
12@app.route('/jingdong')
13def jingdong():
14
15    print(url_for("taobao",token=123))
16    #1.通过url_for找到taobao的地址, 然后通过redirect,进行重定向
17    response =  redirect(url_for("taobao",token=123))
18
19    #2.返回响应体对象
20    return response
21
22@app.route('/yamaxun')
23def yamaxun():
24    #1.通过url_for找到taobao的地址, 然后通过redirect,进行重定向
25    response =  redirect(url_for("taobao",token=456))
26
27    #2.返回响应体对象
28    return response
29
30@app.route('/taobao/<int:token>')
31def taobao(token):
32
33    if token == 123:
34        return "欢迎京东用户,给你打5折"
35    elif token == 456:
36        return "欢迎亚马逊用户,给你打9折"
37    else:
38        return "欢迎其他网站用户,给你9.9折"
39
40if __name__ == '__main__':
41    app.run(debug=True)

12.abort_errorhandler.py

1"""
 2十四,abort&errorhandler
 3
 4- 使用场景: 当访问服务器资源的时候,如果找不到该资源,可以报出异常信息,使用errorhandler捕捉
 5- 格式: abort(代号)
 6- 格式: @app.errorhandler(代号)
 7
 8"""
 9from flask import Flask, abort
10
11app = Flask(__name__)
12
13@app.route('/')
14def hello_world():
15
16    abort(403)
17
18    return "helloworld"
19
20#只要出现了404异常,就能捕捉
21@app.errorhandler(404)
22def page_not_found(e):
23    print(e)
24    return "<h1 style='color:red'>页面找不到</h1>"
25
26#只要出现了403异常,就能捕捉
27@app.errorhandler(403)
28def forrden(e):
29    print(e)
30    return "<h1 style='color:red'>禁止访问</h1>"
31
32if __name__ == '__main__':
33    app.run(debug=True)

13.request.py

1"""
 2十五, request对象参数
 3
 4- request.data: 获取的是非表单(ajax)以post,提交的数据
 5- request.form: 获取的表单以post方式提交的数据
 6- request.args: 获取的是问号后面的查询参数
 7- request.method: 获取的请求方式
 8- request.url: 获取请求的地址
 9- request.files: 获取的是input标签中type类型为file的文件
10
11"""
12from flask import Flask, request
13
14app = Flask(__name__)
15
16@app.route('/')
17def hello_world():
18
19    print(request.method)
20    print(request.url)
21    print(request.args)
22    # print(request.args["name"]) #字典不建议使用[]的方式取值
23    print(request.args.get("name")) #如果获取不到不会报错,返回None
24    print(request.args.get("age",39)) #如果获取不到,设置一个默认值
25
26    return "helloworld"
27
28if __name__ == '__main__':
29    app.run(debug=True)

14.load_appparams.py

1"""
 2十六,加载app程序运行参数
 3
 4- 1.从配置类(对象)中加载
 5  - app.config.from_object(obj)
 6- 2.从配置文件中加载
 7  - app.config.from_pyfile(file)
 8- 3.从环境变量中加载(了解)
 9  - app.config.from_envvar(环境变量)
10- app.config: 表示app程序,运行所有的参数信息
11
12"""
13from flask import Flask
14
15app = Flask(__name__)
16# print(app.config)
17
18# 1.从配置类(对象)中加载
19class MyConfig(object):
20    #调试模式
21    DEBUG = True
22
23    #mysql数据库配置
24
25    #redis配置
26
27    #session配置
28
29# app.config.from_object(MyConfig)
30
31# 2.从配置文件中加载
32# app.config.from_pyfile("Config.ini")
33
34# 3.从环境变量中加载
35app.config.from_envvar("FLASKING")
36
37@app.route('/')
38def hello_world():
39
40    return "helloworld"
41
42if __name__ == '__main__':
43    app.run()

15.request_hook.py

1"""
 2十七,请求钩子
 3
 4- 解释: 当访问正常视图函数的时候,顺带执行的方法
 5- 常见的请求钩子有四种:
 6- 1.before_first_request:在处理第一个请求前执行
 7- 2.before_request:在每次请求前执行,在该装饰函数中,一旦return,视图函数不再执行
 8- 3.after_request:如果没有抛出错误,在每次请求后执行
 9                  接受一个参数:视图函数作出的响应
10                  在此函数中可以对响应值,在返回之前做最后一步处理,再返回
11- 4.teardown_request:在每次请求后执行
12  接受一个参数:用来接收错误信息
13
14"""
15from flask import Flask
16
17app = Flask(__name__)
18
19#before_first_request装饰的函数在第一次访问的时候执行,里面适合做初始化操作,比如,io文件读写
20@app.before_first_request
21def before_first_request():
22    print("before_first_request")
23
24#before_request,每次请求前都执行,适合对请求参数做校验,访问统计
25@app.before_request
26def before_request():
27    print("before_request")
28
29#after_request,视图函数执行之后,返回该方法,适合对返回值做统一处理,比如:返回统一的json数据格式
30@app.after_request
31def after_request(resp):
32    print("after_request")
33    resp.headers["Content-Type"] = "application/json"
34    return resp
35
36#teardown_request,请求销毁之后,执行该方法,适合做异常信息统计
37@app.teardown_request
38def teardown_request(e):
39    print(e)
40    print("teardown_request")
41
42
43@app.route('/')
44def hello_world():
45
46    return "helloworld"
47
48@app.route('/index')
49def index():
50    return "index"
51
52
53if __name__ == '__main__':
54    app.run(debug=True)
相关文章
|
1月前
|
计算机视觉 Python
Flask学习笔记(六):基于Flask的摄像头-web显示代码(可直接使用)
这篇文章是关于如何使用Flask框架结合OpenCV库,通过电脑摄像头实现视频流在网页上的实时显示,并提供了单摄像头和多摄像头的实现方法。
86 2
Flask学习笔记(六):基于Flask的摄像头-web显示代码(可直接使用)
|
3月前
|
数据库连接 开发者 Python
从 Flask 迁移到 FastAPI,这简直是一场奇妙之旅!性能飙升,代码更优,快来感受这份惊喜!
【8月更文挑战第31天】作为一名开发者,从 Flask 迁移至 FastAPI 是一次充满挑战与收获的旅程。起初,Flask 的简洁性和灵活性吸引了我,但随着项目扩展,其性能局限性和较弱的类型提示支持逐渐显现。FastAPI 结合了 Flask 的简洁性和 Django 的强大功能,具备高性能、类型提示支持及自动文档生成等优势,更适合构建现代化 Web 应用。尽管迁移过程中需对现有代码进行调整,以适应 FastAPI 的类型提示和依赖注入机制,但最终应用性能和代码可维护性均显著提升,整个过程也大大提升了我的开发技能。
75 0
|
3月前
|
Python Windows 内存技术
【Azure 应用服务】Azure App Service (Windows) 使用Flask框架部署Python应用,如何在代码中访问静态文件呢?如何设置文件路径?是相对路径还是绝对路径呢?
【Azure 应用服务】Azure App Service (Windows) 使用Flask框架部署Python应用,如何在代码中访问静态文件呢?如何设置文件路径?是相对路径还是绝对路径呢?
|
4月前
|
文字识别 Java Python
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
|
6月前
|
数据安全/隐私保护 Python
【Python】Python Flask token身份认证(附完整代码)
【Python】Python Flask token身份认证(附完整代码)
397 0
|
SQL 关系型数据库 MySQL
【Flask】Flask项目sqlite数据库操作(代码实现)
Flask项目sqlite数据库操作(代码实现)
flask框架(四)配套代码
flask框架(四)配套代码
flask框架(二)配套代码补充
flask框架(二)配套代码补充
flask框架(二)配套代码
flask框架(二)配套代码
|
SQL 缓存 前端开发
基于python flask 实现留言板系统登陆注册 毕业设计 附完整代码
基于python flask 实现留言板系统登陆注册 毕业设计 附完整代码
441 0
基于python flask 实现留言板系统登陆注册 毕业设计 附完整代码