共计 3506 个字符,预计需要花费 9 分钟才能阅读完成。
这篇文章主要讲解了“Python 的 flask 相关知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“Python 的 flask 相关知识点有哪些”吧!
一、flask
a、Flask 是一个基于 Python 开发并且依赖 jinja2 模板和 Werkzeug WSGI 服务的一个微型框架,对于 Werkzeug 本质是 Socket 服务端,其用于接收 http 请求并对请求进行预处理,然后触发 Flask 框架,开发人员基于 Flask 框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助 jinja2 模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器
b、“微”(micro) 并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以),也不意味着 Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模板引擎——则很容易替换。除此之外的一切都由可由你掌握。如此,Flask 可以与您珠联璧合。
c、默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。
d、视频讲解
二、安装
a、安装:pip3 install flask
视频讲解
三、虚拟环境
a、安装: pip3 install virtualenv
b、# 创建虚拟环境 virtualenv env1
c、# 进入虚拟环境 Scripts/activate
d、 # 退出虚拟环境 Scripts/deactivate
四、flask 框架
a、简介:轻量级框架
Django:无 socket、中间件、路由系统、视图(CBV,FBV)、 模板、ORM、cookie、Session、Admin、Form、缓存、信号、序列化....
Flask:无 socket、中间件(扩展)、路由系统、视图(CBV)、第三方模板(jinja2)、cookie、Session 弱爆了
b、 什么是 wsgi? Web 服务网管接口,协议。 c、Flask 依赖一个实现了 WSGI 协议的模块:werkzeug
五、flask
a、 - 依赖于 wsgi 模块:wsgiref,werkzeug,wsgi
b、 - 实例化 Flask 对象
- 静态文件前缀 /xxx
- 静态文件目录
- 模板路径
c、 添加路由关系
- 将 Rule(url 和视图函数) 添加到 Flask 对象的 url_map 字段中
- 两种添加路由的方式
d、request
-request.form
-request.args
六、基本使用
from flask import Flask
# 实例化 Flask 对象
app = Flask(__name__)
# 生成路由关系,并把关系保存到某个地方,app 对象的 url_map 字段中
@app.route(/xxxx) # @decorator
def index():
return Index
# def index():
# return Index
# app.add_url_rule(/xxx , n1 , index)
if __name__ == __main__ :
# 启动程序,监听用户请求
# 一旦请求到来,执行 app.__call__方法
# 封装用户请求
# 进行路由匹配
app.run()
a、保存 session 的数据存到了浏览器上,– 优点:减轻了服务端的压力 – 缺点:不安全
b、路由系统:
@app.route(/post/path:path) @app.route(/login , methods=[ GET , POST]) @app.route(/user/ username) @app.route(/post/int:post_id) @app.route(/post/float:post_id)
七、路由系统 a、- 可传入参数
@app.route(/user/ username)
@qpp.route(/post/ int:post_id ,methods=[ GET , POST],endpoint= fff )
b、反向生成 URL:url_for
c、扩展 Flask 的路由系统,让它支持正则:
from flask import Flask,url_for
app = Flask(__name__)
# 定义转换的类
from werkzeug.routing import BaseConverter
class RegexConverter(BaseConverter):
自定义 URL 匹配正则表达式
def __init__(self, map, regex):
super(RegexConverter, self).__init__(map)
self.regex = regex
def to_python(self, value):
路由匹配时,匹配成功后传递给视图函数中参数的值
:param value:
:return:
return int(value)
def to_url(self, value):
使用 url_for 反向生成 URL 时,传递的参数经过该方法处理,返回的值用于生成 URL 中的参数
:param value:
:return:
val = super(RegexConverter, self).to_url(value)
return val
# 添加到 converts 中
app.url_map.converters[xxx] = RegexConverter
# 进行使用
@app.route(/index/ xxx( \d+):nid ,endpoint= xx )
def index(nid):
url_for(xx ,nid=123)
return Index
if __name__ == __main__ :
app.run()
八、请求响应
from flask import Flask
from flask import request
from flask import render_template
from flask import redirect
from flask import make_response
app = Flask(__name__)
@app.route(/login.html , methods=[ GET , POST])
def login():
# 请求相关信息
# request.method
# request.args
# request.form
# request.values
# request.cookies
# request.headers
# request.path
# request.full_path
# request.script_root
# request.url
# request.base_url
# request.url_root
# request.host_url
# request.host
# request.files
# obj = request.files[the_file_name]
# obj.save(/var/www/uploads/ + secure_filename(f.filename))
# 响应相关信息
# return 字符串
# return render_template(html 模板路径 ,**{})
# return redirect(/index.html)
# response = make_response(render_template( index.html))
# response 是 flask.wrappers.Response 类型
# response.delete_cookie(key)
# response.set_cookie(key , value)
# response.headers[X-Something] = A value
# return response