Dec-21th-Flask-note

版权声明:转载请注明出处 https://blog.csdn.net/Ajinyiping/article/details/85194733

1.搭建虚拟环境

  1. 为每一个项目搭建自己的运行环境,不同项目版本可能冲突
  2. 创建并虚拟环境 mkvirtualenv -p python3 py3_flask13
  3. 进入虚拟环境 workon 环境名
  4. 装入flask pip3 install flask==0.10.1
  5. 退出环境: deactivate
  6. 删除环境: rmvirtualenv 环境名

2.基本结构

  1. 简单的程序

    1. pycharm 导入含有flask解释器

    2. 导入 flask

    3. 创建flask对象

    4. 使用路由并定义视图函数

    5. 运行程序

    6. from flask import Flask
      
      app = Flask(__name__)
      
      
      @app.route("/")
      def index():
          return "hello work"
      
      
      if "__name__"=="__main__":
          app.run()
      
  2. flask对象参数 app = Flask(_name_)

    1. import_name----->访问静态文件路径—>当前文件 _name_
    2. static_path ="/static" ====静态文件路径,用的少,用static_url_path
    3. static_url_path = “/static”====静态文件路径,浏览器的访问路径 默认是 /+静态文件夹
    4. static_folder=“static”====静态文件夹 不传参
    5. template_folder=“templates”===模板文件夹 不传参
    6. app=Flask(_name_)至少传一个参数
  3. flask配置文件

    1. 从对象中加载

      1. 定义一个配置对象的类

      2. 调用配置对象

      3. class MyConfig(object):
            DEBUG = True
            
        app = Flask(__name__)
        app.config.from_object(MyConfig)
        
    2. 从文件中加载

      1. 创建一节配置文件

      2. 调用文件

      3. 新建文件====> 文件名.ini==>内容: DEBUG = True
        app.config.from_pyfile("路径/文件名.ini")
        
    3. 从环境变量中加载

      1. pycharam====》edit configurations ===》添加环境变量
        环境变量名   配置文件路径/文件名.ini
        app.config.from_envvar("路径/文件名.ini")
        
  4. run:三个参数

    1. app.run(host="",port=,debug=True)

    2. if "__name__"=="__main__":
          app.run(host="0.0.0.0",port=22222,debug=True)
      

3.路由:

  1. 路由参数

    1. 不变参数 @app.route("/jin")

    2. 变化参数 @app.route("/jin/")

    3. 参数限制类型 :@app.route(“index/<int:filename>”)

    4. from flask import Flask
      
      jin= Flask(__name__)
      
      
      @jin.route("/")
      def fun1():
          return "成为海贼王"
      
      
      @jin.route("/index/<filename>")
      def fun2(filename):
          return "霹雳魔封" + filename
      
      
      @jin.route("/index2/<int:filename>")
      def fun3(filename):
          return "道临天下 青阳子" + str(filename)
      
      
      if __name__ == '__main__':
          jin.run(debug=True)
      
  2. 请求方式

    1. @route("/jin",methods=[“GET”,“POST”])

    2. from flask import Flask
      from flask import request
      
      jin= Flask(__name__)
      @jin.route("/index3",methods=["GET","PUT","POST"])
      def fun4():
          return "道极天下" + request.method
      
      if __name__ == '__main__':
          jin.run(debug=True)
      

4.视图函数----JSON

  1. 视图函数 返回 text 格式的字符串,不能return 数字,列表 ,字典

  2. 数据格式:类似字典

    1. return json.dumps()=====字典 转 json形式字符串
    2. return json.loads()====json形式字符串 转 字典
    3. return jsonify()======字典 转 json -----浏览器上就是json格式
  3. from flask import Flask, jsonify
    from flask import json
    my_json = {
        "lao":12,
        "wang":"123",
        "name":"haha",
        "age":{
            "qq":18
        }
    }
    app = Flask(__name__)
    @app.route("/")
    def say():
        return json.dumps(my_json) ----->json形式字符串
    	return jsonify(my_json)
    

5.视图函数----重定向:

  1. return 导包redirect(“http://www.baidu.com”)

  2. return redirect("/本地url路径")

  3. return redirect(url_for(“视图函数名”,参数=“ ”)) url_for 导包

  4.  from flask import Flask
     from flask import redirect
     from flask import url_for
     
     
     jin = Flask(__name__)
     @jin.route("/jj/<filename>")
     def say(filename):
     	return filename
     @jin.route("/yi")
     def hada():
     	return "haha"
     
     @jin.route("/jin")
     def speak():
     	# return redirect("https://www.baidu.com")
     	# return redirect("/yi")
     	return redirect(url_for("say",filename="hahahah"))
     
     if __name__ == '__main__':
     	jin.run(debug=True)
    

6.视图函数----自定义状态码

  1. 视图函数 return 主体,状态码

  2. from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route("/")
    def say():
        return "hahah",555
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    

7.正则转换器

  1. 导入 BaseConverter 定义正则匹配器的类 ===> 将自定义的匹配器加入转换器了表

  2. 细节: 正则表达式 加双引号 =所以参数单引号=加入转换器列表时 app.url_map.converters[“转换器名”] = 转换器类

  3. from flask import Flask
    from werkzeug.routing import BaseConverter
    
    app =Flask(__name__)
    
    
    class MyRexgexConverter(BaseConverter):
        rexgex = "\\d{3}"
    
    
    class MyConverter(BaseConverter):
        def __init__(self,url_map,*args):
            super(MyConverter, self).__init__(url_map)
            self.regex = args[0]
    
    
    app.url_map.converters["re"] = MyRexgexConverter
    app.url_map.converters["mo"] = MyConverter
    
    
    @app.route("/<re:filename>")
    def say(filename):
        return "浩然天下 佛剑分说" + str(filename)
    
    
    @app.route('/index/<mo("[a-z]{3}"):filename>')
    def say2(filename):
        return filename
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    

8.正则匹配器函数

  1. def _init_(self,map_url,*args):

    ​ super(匹配器类名,self)._init_(url_map)

    ​ self.regex = args[0]

  2. def to_python(self,value)

    视图函数正则匹配完成将filename == 传给 value 对 value处理后= 将 value 返回给 视图函数

  3. def to_url(self,value)

    将 重定向中的 redirect(url_for(“视图函数名”,filename=“123”))===将其中的filename 处理 === 使其符合视图函数的正则匹配

  4. from flask import Flask
    from flask import redirect
    from flask import url_for
    from werkzeug.routing import BaseConverter
    
    app=Flask(__name__)
    
    
    class MyConverter(BaseConverter):
        def __init__(self,url_map,*args):
            super(MyConverter, self).__init__(url_map)
            self.regex = args[0]
    
        def to_python(self, value):
            result = str(value.split(","))
            return result
    
        def to_url(self, value):
            result = (",").join([str(i) for i in value])
            return result
    
    app.url_map.converters["re"] = MyConverter
    
    
    @app.route('/<re("(\\d+,?)+"):filename>')
    def fun(filename):
        return filename
    
    
    @app.route("/index")
    def fun2():
        return redirect(url_for("fun",filename=[1,2,3,4]))
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    

猜你喜欢

转载自blog.csdn.net/Ajinyiping/article/details/85194733
DEC
th