flask的简介
flask是用python开发的一款轻量级的web框架,里面是由Werkzeug以及jinjia2模板组成,django也是用模板,是用jinjia2
1. django与flask都是实现了WSGI协议
2. flask用的werkzeug来wsgi进行了封装,werkzeug是用run_simple('localhost', 4000, hello) 第一个是ip,第二个是项目启动端口,第三个是可执行对象,当请求wsgi,就会调用第三个参数
如何启动一个flask项目
pip install flask
# 1 导入flask
from flask import Flask
# 2 生成一个flask对象,__name__表示当前文件的名称
app = Flask(__name__)
# 3 添加路由,flask用的是装饰器的模式
# 注册路由,并编写相应的函数index
@app.route("/")
def index():
return "Hello flask"
if __name__ == '__main__':
# 4 启动flask
# run里面是执行了run_simple(host, port, self=app, 也就是flask对象)
app.run()
flask(返回字符串,返回html,跳转路由,返回json)
# 要求: 如何返回一个字符串,一个html页面,如何跳转页面,如何返回一个json字符串
from flask import Flask,render_template,redirect,jsonify
app = Flask(__name__)
@app.route("/index")
def index():
# 返回字符串
return "我是字符串"
# 返回一个html文件
#1 从flask导出render_template
#2 在同级目录中添加templates文件夹,将html页面创建到文件夹下
return redirect("/login")
# 返回数据转jason,要从flask中导入jsonify
data = {"name": "godlover"}
return jsonify(data)
@app.route("/login")
def login():
return "我是lgoin页面"
if __name == '__main__':
app.run()
flask的配置文件
# 这里讲四种给flask做配置 (其实不止四种)
# 1 直接给app对象赋值属性(不推荐)
# 2 以字典的形式,给flask做配置
# 3 以文件的形式,给flask做配置(django就是这种)
# 4 以类的形式,给flask做配置(推荐)
from flask import Flask
app = Flask(__name__)
# 1方式1(不推荐),因为他只能配置两个配置项,一个是debug 一个是secret_key
# app.debug = True
# 2 方式2 字典的形式,这个里面就可以对所有的flask配置项做配置
#app.config["DEBUG"] = True
#3 方式3 以文件的形式,在form_pyfile(里面传递配文件的路径)
#app.config.from_pyfile("settings.py")
#4 方式4 以类的形式,为什么推荐? 因为他可以实现一个文件多个配置,而且减少测试与上线更改的配置项
app.config.from_object("setobj.settings")
@app.route("/")
def index():
return "jason is dsb"
if __name__ == '__main__':
app.run()
路由本质以及参数
1.@app.route("/login") 的本质就是app.add_url_rule("/login",view_func=login),所以可以用这两种方式来添加路由
2.路由的参数:
2.1 endpoint,做的是反向解析,没有传endpoint就是使用响应的函数名,反向解析用的是url_for()做解析,从flask中导出来的
2.2 methods=["POST", "GET"],该参数控制路由允许哪些请求方式访问,如果不传,默认是get方法
2.3 路由以及路由转换器(有名分组) "/index/<int:path>",<参数的类型:用哪个变量来接收>,响应函数中的形参额名字要与转换器中的一致
代码:
from flask import Flask,url_for,redirect
app = Flask(__name__)
# @app.route("/")
def index(nid):
print(nid,type(nid))
return "ojbk"
#@pp.route的本质就在执行add_url_rule这个中的rule是路由,endpoint是路由别名,view_func是响应函数
#如果endpoint不传就是响应的函数名
app.add_url_rule("/index/<int:nid>", endpoint="index1",view_func=index,methods=["POST","GET"])
@app.route("/login",methods=["POST"])
def login():
#用endpoint取路由要用url_for 在flask中导入,也就是反向解析
print(url_for("index1"))
# return redirect(url_for("index1"))
#路由参数;methods,可以控制该方法能有哪些请求方式可以访问
#app.add_url_rule("/index", endpoint="index1",view_func=index,methods=["POST"])
# 路由参数:有名分组,app.add_url_rule("/index/<int:nid>"响应函数必须用nid来接收
if __name__ == '__main__':
app.run()
图解:
有名分组: