zoukankan      html  css  js  c++  java
  • 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()
    

    图解:

    有名分组:

  • 相关阅读:
    【hdoj_1133】Buy the Ticket(卡特兰数+大数)
    【hdoj_1042】N!(大数)
    【hdoj_1002】A+B Problem ||(大数)
    【hdoj_2566】统计硬币(母函数?)
    【转载】自定义View,有这一篇就够了
    【转载】自定义View学习笔记之详解onMeasure
    【转载】深入剖析自定义View之onMeasure
    【转载】【凯子哥带你学Framework】Activity启动过程全解析
    【转载】【凯子哥带你学Framework】Activity界面显示全解析(下)
    【转载】【凯子哥带你学Framework】Activity界面显示全解析(上)
  • 原文地址:https://www.cnblogs.com/godlover/p/12523398.html
Copyright © 2011-2022 走看看