flask的简介:如何启动一个flask项目,flask(返回字符串,返回html,跳转路由,返回json),flask的配置文件,路由本质以及参数

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()

图解:

有名分组:

posted @ 2020-03-19 12:14  godlover  阅读(751)  评论(0编辑  收藏  举报