1.搭建虚拟环境
- 为每一个项目搭建自己的运行环境,不同项目版本可能冲突
- 创建并虚拟环境 mkvirtualenv -p python3 py3_flask13
- 进入虚拟环境 workon 环境名
- 装入flask pip3 install flask==0.10.1
- 退出环境: deactivate
- 删除环境: rmvirtualenv 环境名
2.基本结构
-
简单的程序
-
pycharm 导入含有flask解释器
-
导入 flask
-
创建flask对象
-
使用路由并定义视图函数
-
运行程序
-
from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "hello work" if "__name__"=="__main__": app.run()
-
-
flask对象参数 app = Flask(_name_)
- import_name----->访问静态文件路径—>当前文件 _name_
- static_path ="/static" ====静态文件路径,用的少,用static_url_path
- static_url_path = “/static”====静态文件路径,浏览器的访问路径 默认是 /+静态文件夹
- static_folder=“static”====静态文件夹 不传参
- template_folder=“templates”===模板文件夹 不传参
- app=Flask(_name_)至少传一个参数
-
flask配置文件
-
从对象中加载
-
定义一个配置对象的类
-
调用配置对象
-
class MyConfig(object): DEBUG = True app = Flask(__name__) app.config.from_object(MyConfig)
-
-
从文件中加载
-
创建一节配置文件
-
调用文件
-
新建文件====> 文件名.ini==>内容: DEBUG = True app.config.from_pyfile("路径/文件名.ini")
-
-
从环境变量中加载
-
pycharam====》edit configurations ===》添加环境变量 环境变量名 配置文件路径/文件名.ini app.config.from_envvar("路径/文件名.ini")
-
-
-
run:三个参数
-
app.run(host="",port=,debug=True)
-
if "__name__"=="__main__": app.run(host="0.0.0.0",port=22222,debug=True)
-
3.路由:
-
路由参数
-
不变参数 @app.route("/jin")
-
变化参数 @app.route("/jin/")
-
参数限制类型 :@app.route(“index/<int:filename>”)
-
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)
-
-
请求方式
-
@route("/jin",methods=[“GET”,“POST”])
-
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
-
视图函数 返回 text 格式的字符串,不能return 数字,列表 ,字典
-
数据格式:类似字典
- return json.dumps()=====字典 转 json形式字符串
- return json.loads()====json形式字符串 转 字典
- return jsonify()======字典 转 json -----浏览器上就是json格式
-
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.视图函数----重定向:
-
return 导包redirect(“http://www.baidu.com”)
-
return redirect("/本地url路径")
-
return redirect(url_for(“视图函数名”,参数=“ ”)) url_for 导包
-
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.视图函数----自定义状态码
-
视图函数 return 主体,状态码
-
from flask import Flask app = Flask(__name__) @app.route("/") def say(): return "hahah",555 if __name__ == '__main__': app.run(debug=True)
7.正则转换器
-
导入 BaseConverter 定义正则匹配器的类 ===> 将自定义的匹配器加入转换器了表
-
细节: 正则表达式 加双引号 =所以参数单引号=加入转换器列表时 app.url_map.converters[“转换器名”] = 转换器类
-
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.正则匹配器函数
-
def _init_(self,map_url,*args):
super(匹配器类名,self)._init_(url_map)
self.regex = args[0]
-
def to_python(self,value)
视图函数正则匹配完成将filename == 传给 value 对 value处理后= 将 value 返回给 视图函数
-
def to_url(self,value)
将 重定向中的 redirect(url_for(“视图函数名”,filename=“123”))===将其中的filename 处理 === 使其符合视图函数的正则匹配
-
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)