flask是一个轻量级框架,它默认依赖2个外部库:Jinja2 模板、 WSGI工具集--Werkzeug。
flask的使用特点是基本所有的工具使用都依赖于导入的形式去扩展,flask只保留了web开发的核心功能。
通常:我们学习一个web框架只需要学会 如何使用路由、如何使用视图函数与模板语法、如何导入数据库 就可以跑通一个web项目
安装Flask:pip install flask
安装Flash:pip install flask
1|0****一、Werkzeug简介
代码示例:
from werkzeug.wrappers import Request, Response
'''
werkzeug是一个WISGI工具包。它可以作为一个web框架的底层库。
'''
@Request.application
def hello(request):
print(request)
return Response('Hello World!')
if __name__ == '__main__':
from werkzeug.serving import run_simple
# run_simple('127.0.0.1', 4000, hello)
run_simple('localhost', 4000, hello)
2|0****二、初识flask
小结:
1 app.run() 调用 werkzeug.serving的run_simple(host, port, self, **options)
2 self()等价于app(), app()调用Flask类的__call__方法
3 Flask类的__call__方法返回了 self.wsgi_app(environ, start_response)
4 flask程序的执行过程都在 self.wsgi_app(environ, start_response)中
3|0****三、Debug模式
4|0****四、导入配置的四种方式
flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为:
{
'DEBUG': get_debug_flag(default=False), 是否开启Debug模式
'TESTING': False, 是否开启测试模式
'PROPAGATE_EXCEPTIONS': None,
'PRESERVE_CONTEXT_ON_EXCEPTION': None,
'SECRET_KEY': None,
'PERMANENT_SESSION_LIFETIME': timedelta(days=31),
'USE_X_SENDFILE': False,
'LOGGER_NAME': None,
'LOGGER_HANDLER_POLICY': 'always',
'SERVER_NAME': None,
'APPLICATION_ROOT': None,
'SESSION_COOKIE_NAME': 'session',
'SESSION_COOKIE_DOMAIN': None,
'SESSION_COOKIE_PATH': None,
'SESSION_COOKIE_HTTPONLY': True,
'SESSION_COOKIE_SECURE': False,
'SESSION_REFRESH_EACH_REQUEST': True,
'MAX_CONTENT_LENGTH': None,
'SEND_FILE_MAX_AGE_DEFAULT': timedelta(hours=12),
'TRAP_BAD_REQUEST_ERRORS': False,
'TRAP_HTTP_EXCEPTIONS': False,
'EXPLAIN_TEMPLATE_LOADING': False,
'PREFERRED_URL_SCHEME': 'http',
'JSON_AS_ASCII': True,
'JSON_SORT_KEYS': True,
'JSONIFY_PRETTYPRINT_REGULAR': True,
'JSONIFY_MIMETYPE': 'application/json',
'TEMPLATES_AUTO_RELOAD': None,
}
- 方式一:
from flask import Flask
app = Flask(__name__)
#方式一
app.debug=True
app.secret_key="asdjja"
@app.route("/")
def index():
return "ok"
if __name__ == '__main__':
app.run()
- 方式二:以字典的形式
from flask import Flask
app = Flask(__name__)
#方式二,以字典的形式
app.config['DEBUG']=True
@app.route("/")
def index():
return "ok"
if __name__ == '__main__':
app.run()
- 方式三:以文件的形式
from flask import Flask
app = Flask(__name__)
#方式三 ,以文件的形式
app.config.from_pyfile("settings.py")
@app.route("/")
def index():
return "ok"
if __name__ == '__main__':
app.run()
'''settings.py'''
DEBUG=True
- 方式四:以类的形式
from flask import Flask
app = Flask(__name__)
#方式四 ,以类的形式(*****)
app.config.from_object("settings.test")
@app.route("/")
def index():
return "ok"
if __name__ == '__main__':
app.run()
5|0****五、返回数据的四种方式
from flask import Flask,render_template,redirect,jsonify,request
app=Flask(__name__)
'''
1 返回字符串
2 返回模板:render_template
3 跳转:redirect
4 返回 json
'''
@app.route("/")
def index():
return "ojbk"
@app.route("/index")
def index1():
return render_template("index.html")
@app.route("/home")
def home():
return redirect("/index")
@app.route("/json")
def json1():
data_dic={'name':"jason",'age':38}
# 返回字典序列化为json串
return jsonify(data_dic)
if __name__ == '__main__':
app.run()
templates->index.html
模板文件夹的名字必须叫这个
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户列表</h1>
</body>
</html>