新建一个flask项目

  • 一、准备git仓库
    • 本地创建仓库
      新建文件夹
      git init

    • 远程创建仓库
      新建一个git仓库
    • 给仓库添加别名
      git remote add origin https://gitee.com/xzzhen/flask_log

      查看别名:
       git remote -v

    • 给仓库新建文件夹
      touch st
      git add --all :提交
      git commit --m "add test6"
      git push origin master

      刷新git仓库,看到git仓库有一个test文件夹就成功了
    • 修改.gitignore文件
      vim .gitignore
      添加下面两行:
      ​*.pyc
      .idea/

  • 二、构建虚拟环境
    • 1、虚拟环境是什么
      • 当你拥有的Python项目越来越多,当不同项目中对库的版本冲突时虚拟环境可以为项目提供独立的运行环境,虚拟环境之间互不干扰
      • python -> python虚拟环境(虚拟环境是一个全局环境的副本)
      • Windows -> vmware虚拟机
    • 2、虚拟环境与项目的关系新建一个flask项目_第1张图片
    • 3、创建一个虚拟环境(创建在项目的上一次目录)新建一个flask项目_第2张图片
      python -m venv venv(第二个venv是文件名)
      cd ~/Desktop/flask_learning
      # 创建虚拟环境
      python36 -m venv venv

      # 进入虚拟环境
      source venv/Scripts/activate

      用source命令进入后,前面有venv代表进入了虚拟环境
      • 在pycharm中设置虚拟环境新建一个flask项目_第3张图片新建一个flask项目_第4张图片
        添加文件-> settings -> 解释器 -> ~/Desktop/flask_learning/venv/Scripts/python.exe
        ​验证:打开的是虚拟环境中的python.exe即可
        先添加新的虚拟环境
        然后在新窗口打开项目
        在调试新的虚拟环境
        Terminal:Local显示(venv)表示设置成功
  • 三、开始第一个flask项目
    • flask里面有一个默认的小型测试新建一个flask项目_第5张图片
      • flask项目
        创建项目: flask_proj_ex/server.py
        # 导入Flask核心对象
        from flask import Flask
        # 实例化一个应用app(实例化时需要给一个字符串,通常用__name__值)
        # 这个名字将作为Flask核心对象的标识app = Flask(__name__)
        ​运行应用 app.run()
      • 编辑第一个页面
        • 第一种方法:
          #导入flask核心对象from
          from flask import Flask
          app=Flask(__name__)
          @app.route('/index')###装饰器装饰index
          def index():
          return "this is index"
          app.run()

        • 第二种方法:
          # from flask import Flask
          ​# app=Flask(__name__)
          ​#@app.route('/index2')###装饰器装饰index
          ​# def index2():
          ​# return "this is index2"
          ​# app.add_url_rule("/index2",view_func=index2)
          ​# app.run()

        • 运行代码完成,网页输入127.0.0.1:5000/index或者127.0.0.1:5000/index2新建一个flask项目_第6张图片新建一个flask项目_第7张图片
  • 创建多个页面:要查看哪个页面,就用ip号:端口号/函数名新建一个flask项目_第8张图片
    from flask import Flask
    # app=Flask(__name__)
    # @app.route('/index1')###装饰器装饰index
    # def index1():
    # return "this is index1"
    # @app.route('/index2')###装饰器装饰index
    # def index2():
    # return "this is index2"
    # app.add_url_rule("/index2",view_func=index2,endpoint="index")
    # @app.route('/index3')###装饰器装饰index
    # def index3():
    # return "this is index3",201
    # app.run(host="0.0.0.0",port=5000,debug=True)#修改完debug会自动帮忙重启,第一次要手动重启

     
  • 任何IP都可以的页面
    # @app.route('/index3')
    ###装饰器装饰index
    # def index3():
    # return "this is index3",201
    # app.run(host="0.0.0.0",port=5000,debug=True)#修改完debug会自动帮忙重启,第一次要手动重启

  • 核心对象的拆分
    • 1、配置系统环境变量
      在linux中vim .bash_profile
      添加export FLASK_CONF=/root/flask
      通过env可以直接查看
    • 2、配置app.py文件
      import os
      from flask import Flask
      def create_app(config=None):
      app=Flask(__name__)
      app.config.from_object("config.settings")
      ####根据系统环境变量FLASK_CONF,加载不同配置文件,去做系统兼容
      if "FLASK_CONF" in os.environ:
      app.config.from_envvar("FLASK_CONF")
      ###如果FLASK_CONF在系统环境配置中,就去加载它指向的文件
      if config is not None:
      if isinstance(config,dict):
      app.config.update(config)
      elif config.endswith(".py"):
      app.config.from_pyfile("config")
      return app

    • 3、导入配置文件
      from app import create_app
      app=create_app()
      @app.route('/index1')###装饰器装饰index
      def index1():
      return "this is index1"
      @app.route('/index2')###装饰器装饰index
      def index2():
      return "this is index2"
      app.add_url_rule("/index2",view_func=index2,endpoint="index")
      @app.route('/index3')###装饰器装饰index
      def index3():
      return "this is index3",201
      app.run(host=app.config["HOST"],
      port=app.config["PORT"],
      debug=app.config["DEBUG"])

  • 配置的拆分:多页面下加载配置
    • 第一种方法
      from flask import Flask
      app=Flask(__name__)
      app.config.from_object('config.settings')###绝对路径加载进来@app.route('/index1')###装饰器装饰index
      def index1():
      return "this is index1"
      @app.route('/index2')###装饰器装饰index
      def index2():
      return "this is index2"
      app.add_url_rule("/index2",view_func=index2,endpoint="index")
      @app.route('/index3')###装饰器装饰index
      def index3():
      return "this is index3",201
      app.run(host=app.config["HOST"],
      port=app.config["PORT"],
      debug=app.config["DEBUG"])#修改完debug会自动帮忙重启,第一次要手动重启

    • 第二种方法:先加载配置文件
      # from config.settings import *
      # from flask import Flask
      # app=Flask(__name__)
      # @app.route('index1')###装饰器装饰index
      # def index1():
      # return "this is index1"
      # @app.route('/index2')###装饰器装饰index
      # def index2():
      # return "this is index2"
      # app.add_url_rule("/index2",view_func=index2,endpoint="index")
      # @app.route('/index3')###装饰器装饰index
      # def index3():
      # return "this is index3",201
      # app.run(host=HOST,port=PORT,debug=DEBUG)#修改完debug会自动帮忙重启,第一次要手动重启

    • 第三种方法:修改系统环境配置
      import os
      from flask import Flask
      def create_app(config=None):
      app=Flask(__name__)
      app.config.from_object("config.settings")
      ####根据系统环境变量FLASK_CONF,加载不同配置文件,去做系统兼容 if "FLASK_CONF" in os.environ:
      app.config.from_envvar("FLASK_CONF")
      ###如果FLASK_CONF在系统环境配置中,就去加载它指向的文件

  • 视图拆分
    • 1、创建__init__.py法,导入__init__.py中的app(初始化)
      • 在__init__.py中创建app
        创建app
        ​from app import create_app
        ​app=create_app()

      • 创建view01,放入第一个页面
        from router import *#####导入__init__.py中的app
        @app.route('/index1')###装饰器装饰index
        def index1():
        return "this is index1"

      • 创建view02,放入第二个页面
        from router import *
        @app.route('/index2')###装饰器装饰index
        def index2():
        return "this is index2"
        app.add_url_rule("/index2",view_func=index2,endpoint="index")

      • 主函数:
        from app import create_app
        from router import *
        # app=create_app()
        from router import view01,view02
        app.run(host=app.config["HOST"],
        port=app.config["PORT"],
        debug=app.config["DEBUG"])

    • 2、蓝图:
      • 修改view01:把路由注册到蓝图中
        from flask import Blueprint ###把路由注册到蓝图上view01_bp=Blueprint('view01',__name__,url_prefix="/view01/")###指定url的前缀
        # 带前缀查看的时候就是:192.168.255.5:5000/view01/index1
        ###用view01_bp来管理@view01_bp.route('/index1')###装饰器装饰index
        def index1():
        return "this is index1"

      • 修改view02
        from flask import Blueprint
        view02_bp=Blueprint('view02',__name__,url_prefix="/view02/")
        @view02_bp.route('index2')
        def index2():
        return "this is index2"
        view02_bp.add_url_rule("/index2",view_func=index2,endpoint="index")

      • 修改__init__.py:把蓝图对象注册到app中
        from .view01 import view01_bp
        from .view02 import view02_bp
        def init_app(app):
        app.register_blueprint(view01_bp)###把蓝图对象注册到app中 app.register_blueprint(view02_bp)

      • 创建server
        ####2、蓝图法
        from app import create_app
        from router import init_app
        app=create_app()
        init_app(app)
        app.run(host=app.config["HOST"],
        port=app.config["PORT"],
        debug=app.config["DEBUG"])

      • 查看时方法
        例:192.168.255.5:5000/view01/index1
  • 参数传递
    • 1、构造动态的url,可以通过url来进行参数的传递
      • 设置view01
        from flask import Blueprint ###把路由注册到蓝图上view01_bp=Blueprint('view01',__name__,url_prefix="/view01/")###指定url的前缀
        # 带前缀查看的时候就是:192.168.255.5:5000/view01/index1
        ###用view01_bp来管理
        @view01_bp.route('/index1/',endpoint="index2")###装饰器装饰index
        ###<>设置url
        def index1(id):
        return f"ID IS:{id},this is index1"
        • 设置view01支持方法
          # 例如用methods参数指定通过哪些http方法请求这个url,methods为一个list类型
          from flask import Blueprint ###把路由注册到蓝图上view01_bp=Blueprint('view01',__name__,url_prefix="/view01/")###指定url的前缀
          # 带前缀查看的时候就是:192.168.255.5:5000/view01/index1
          ###用view01_bp来管理@view01_bp.route('/index1/',endpoint="index2",methods=["GET","POST"])###装饰器装饰index
          ###<>设置url
          def index1(id):
          return f"ID IS:{id},this is index1"

      • 设置server:与上同
    • 2、获取url的请求参数
      • 设置view01新建一个flask项目_第9张图片
        from flask import request
        from flask import Blueprint ###把路由注册到蓝图上view01_bp=Blueprint('view01',__name__,url_prefix="/view01/")
        ###指定url的前缀# 带前缀查看的时候就是:192.168.255.5:5000/view01/index1
        ###用view01_bp来管理@view01_bp.route('/index1/',endpoint="index2",methods=["GET","POST"])###装饰器装饰index
        ###<>设置url
        # def index1(id):
        # username=request.args["username"]
        # pw=request.args["passwd"]
        # return f"username is {username},passwd is {pw}"

      • server同上
      • 也可以设置view01
        • 从url参数获取数据新建一个flask项目_第10张图片
          def index1(id):
          ###从url参数获取数据
          # username=request.args["username"]
          # pw=request.args["passwd"]

           
        • 从表单获取数据新建一个flask项目_第11张图片
          def index1(id):
          # ###从表单获取数据
          username=request.form["username"]
          pw=request.form["passwd"]
          # url=request.url###获取url和method
          # method=request.method
          return f"username is{username},passwd is{pw}"

  • request对象常用属性新建一个flask项目_第12张图片
    • # form----记录请求中的表单数据 multidict
    • # args----记录请求中的url查询参数 multidict
    • # cookies---记录请求中的cookie dict
    • # headers---记录请求中的报文头
    • # method---记录请求过来的http方法 string
    • # url---记录请求过来的url地址 string
    • # json---记录请求过来的json数据
  • flask的请求与响应
    • web应用的开发的主要逻辑就是:从http请求里面提取数据
    • 根据数据做相应的处理再发送数据给客户端
    • flask对于这一来一回的数据都进行了分装
    • 请求 封装成request对象
    • 应答 封装成response对象

你可能感兴趣的:(flask)