Flask是一种使用python编写的轻量级的web微框架,它可以很好地结合MVC模式进行开发,具有很强的兼容性和扩展性,用户可以根据自己的需求来添加相应的功能,其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Werkzeug库十分强大,功能比较完善,支持URL路由请求集成,一次可以响应多个用户的访问请求;支持Cookie和会话管理,通过身份缓存数据建立长久连接关系,并提高用户访问速度;支持交互式Javascript调试,提高用户体验;可以处理HTTP基本事务,快速响应客户端推送过来的访问请求。Jinja2库支持自动HTML转移功能,能够很好控制外部黑客的脚本攻击。
Flask的基本模式为在程序里将一个视图函数分配给一个URL,每当用户访问这个URL时,系统就会执行给该URL分配好的视图函数,获取函数的返回值并将其显示到浏览器上(百度摘录):
flask参考教程:
https://www.w3cschool.cn/flask/
https://dormousehole.readthedocs.io/en/latest
注:创建独立项目虚拟机的目的是为了防止因其它项目毁坏环境,导致该项目无法运行的情况。以下是一些虚拟机常用命令
pip install virtualenv
创建虚拟环境
mkvirtualenv 环境名
切换虚拟环境
workon 环境名
列出虚拟环境
lsvirtualenv
删除虚拟环境
rmvirtualenv安装Flask
注:高于1.1.2版本的flask可能会出现不兼容的情况
pip install flask == 1.1.2
安装Flask时,会自动安装以下依赖:
| 依赖 | |
|---|---|
| Werkzeug | 用于实现 WSGI ,应用和服务之间的标准 Python 接口 |
| Jinja | 用于渲染页面的模板语言 |
| MarkupSafe | 与 Jinja 共用,在渲染页面时用于避免不可信的输入,防止注入攻击 |
| ItsDangerous | 保证数据完整性的安全标志数据,用于保护 Flask 的 session cookie |
| Click | 是一个命令行应用的框架。用于提供 flask 命令,并允许添加自定义 管理命令 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w2dwYknG-1651652343727)(assets/Flask框架初学/image-20220429194633046.png)]
static一般用来存放一些静态文件,如css、images、js等
templates用来存放模板,即html前端界面
app.py是整个程序运行的入口
一个简单的flask应用可以通过一个简单的example,进入到flask的世界
settings.py 配置文件,可配置不同环境的不同变量
# 配置文件 ENV = 'development' DEBUG = True
index.html
Title
register2.html
Title
欢迎来到我的学习乐园
app.py
import json from flask import Flask, Response, request, render_template, url_for from werkzeug.utils import redirect import settings # 创建一个Flask实例 app = Flask(__name__) # 导入外部文件,这里导入settings配置 app.config.from_object(settings) ''' print(app.config) 返回一个字典:''' data = {'a':'北京','b':'上海','c':'深圳'} users = [] # 修改环境 环境有:production development testing # app.config['ENV'] = 'development' # 修改debug的状态 # app.config['DEBUG'] = True # 默认ip为 127.0.0.1:5000 这里的'/'指的是http://127.0.0.1:5000/ endpoint 为路径命名 @app.route('/',endpoint='index') def hello_word(): return render_template('index.html') @app.route('/register') def register(): # 默认从templates文件夹里查询.html文件 # r = render_template('register.html') r = render_template('register2.html') print(r) return r @app.route('/come', methods=['GET','POST']) def come(): print(request.full_path) print(request.path) # 只能取到GET请求的传参 print(request.args) # print(request.args.get('username')) # print(request.args.get('address')) # 可以取到POST请求的传参 print(request.form) print(request.form.get('username')) print(request.form.get('address')) return "进来了" @app.route('/register2',methods=['GET','POST']) def register2(): username = request.form.get('username') password = request.form.get('password') repassword = request.form.get('repassword') if password == repassword and username != '': user = {'username':username,'password':password} users.append(user) # 重定向到名为index的路径'/' return redirect(url_for('index')) # return 'register success !' return render_template('register2.html') @app.route('/show') def show(): json_str = json.dumps(users) return json_str @app.route('/test') def test(): url = url_for('index') print(url) # 绑定路由规则 # app.add_url_rule('/index',view_func=index) if __name__ == '__main__': # 路由规则表 # print(app.url_map) # host改成0.0.0.0,同一局域网下的其他主机可进行访问 # debug默认为off,即false,代码发生改变不会自动加载 适用于production环境;debug=True,只要代码发生改变,服务器会重新加载最新代码 适用于开发环境 development # run(host='0.0.0.0',port='',debug='True') # app.run(port=8008) app.run()
访问结果:
知识点:
知识点1:
设置配置文件settings,环境:production development testing
ENV = 'development'
DEBUG = True
导入外部文件,这里导入settings配置
import setting
1、app.config.from_object(settings)
2、app.config.from_pyfile('settings')
引用配置文件settings:
print(app.config) ---->字典
app.config['ENV'] = 'development'
app.config['DEBUG'] = True
知识点2:
app.run(host='0.0.0.0',port=5001,debug=True)
debug:布尔型
debug = True 开启了debug调试模式 只要改变服务器代码会重新加载最新的代码 适用于开发环境development
debug = False 默认 代码发生改变不会自动加载 适用于production环境
知识点3:
路由(下一章详解):
# 默认ip为 127.0.0.1:5000 这里的'/'指的是http://127.0.0.1:5000/ endpoint 为路径命名
@app.route('/',endpoint='index')



