目录
一, Werkzeug 简介
二, 初识 flask
三, Debug 模式
四, 导入配置的四种方式
五, 返回数据的四种方式
flask 是一个轻量级框架, 它默认依赖 2 个外部库: Jinja2 模板, WSGI 工具集 --Werkzeug.
flask 的使用特点是基本所有的工具使用都依赖于导入的形式去扩展, flask 只保留了 web 开发的核心功能.
通常: 我们学习一个 Web 框架只需要学会 如何使用路由, 如何使用视图函数与模板语法, 如何导入数据库 就可以跑通一个 Web 项目
安装 Flash:pip install flask
一, Werkzeug 简介
Werkzeug 是一个 WSGI 工具包, 他可以作为一个 Web 框架的底层库. 这里稍微说一下, werkzeug 不是一个 Web 服务器, 也不是一个 Web 框架, 而是一个工具包, 官方的介绍说是一个 WSGI 工具包, 它可以作为一个 Web 框架的底层库, 因为它封装好了很多 Web 框架的东西, 例如 Request,Response 等等 .
代码示例:
- 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)
二, 初识 flask
- # 导入 Flask 模块
- from flask import Flask
- App = Flask(__name__)
- @App.route("/")
- def index():
- return "ojbk"
- if __name__ == '__main__':
- # __call__
- App.run()
- '''
- flask 中 app.run() 会调用 run_simple(host, port, self, **options)
- self 也就是 app.app() 会触发 Flask 类的__call__方法.
- '''
小结:
App.run() 调用 werkzeug.serving 的 run_simple(host, port, self, **options)
self() 等价于 App(), App() 调用 Flask 类的__call__方法
Flask 类的__call__方法返回了 self.wsgi_app(environ, start_response)
flask 程序的执行过程都在 self.wsgi_app(environ, start_response) 中
三, Debug 模式
flask 代码中如果出现了异常, 我们在浏览器中不会提示具体的错误信息, 开启 debug 模式后会把具体的错误信息发送到浏览器上.
flask 代码如果被修改了, 必须要重启项目修改的代码才会有效, 开启 debug 模式后我们修改了代码只要 ctrl+s 我们的 flask 项目就会自动重新加载, 不需要手动加载整个网站.
四, 导入配置的四种方式
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()
五, 返回数据的四种方式
返回字符串
返回模板: render_template
跳转: redirect
返回 JSON
- 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>
来源: http://www.bubuko.com/infodetail-3365268.html