项目环境配置
安装python环境
校验python 和pip是否安装好
//查看python安装 python -V //查看pip安装 pip -V
新建项目文件夹 demo
mkdir flaskdemo cd flaskdemo
安装 pipenv
pip install pipenv # 这个是进行虚拟环境管理的工具,不同的项目分割不同的环境
进入到项目文件夹下,安装虚拟环境
//创建虚拟环境,如果里面有配置文件,会直接安装配置中的插件 pipenv install //激活虚拟环境 pipenv shell //退出 exit //卸载包 pipenv uninstall flask //查看包依赖关系 pipenv graph //进入虚拟环境中,查看虚拟环境的安装目录 pipenv --venv
tips:在windows退出环境时没有提示,linux有提示
安装各种包:一下为基础通用的各种包,选择安装。
# 安装flask pipenv install flask # mysql驱动 pinenv install cymysql==0.9.1 # web登录插件 pipenv install flask-login # email插件 pipenv install flask-mail # 表单字段校验插件 pipenv install WIForms # 请求库插件 pipenv install requests # 数据库映射插件 pipenv install Flask-SQLAlchemy # 验证登录相关 Flask-HTTPAuth==2.7.0 # 其他相关 Flask-Cors==2.1.0 Flask-WTF==0.14.2
开发工具: Pycharm,Xampp(mysql),Navicat(数据库可视化工具)
项目的初始化
新建配置文件:新建文件目录 app/config, 新建配置文件 secure.py 和 settings.py,主要存储项目中的配置信息
创建自定义 app/libs/redprint.py flask默认的是blueprint主要用作模块的区分,不建议为了分离视图是用 blueprint,可以优化url的路径
# 根据 blueprint源码的实现 class RedPrint: def __init__(self, name): self.name = name self.mound = [] def route(self, rule, **options): def decorator(f): self.mound.append((f, rule, options)) return f return decorator def register(self, bp, url_prefix=None): """ 将 redprint注册到 blueprint,实际调用 blueprint代码 """ if url_prefix is None: url_prefix = '/' + self.name for f, rule, options in self.mound: endpoint = options.pop("endpoint", f.__name__) bp.add_url_rule(url_prefix + rule, endpoint, f, **options)
创建视图函数文件
from app.libs.redprint import RedPrint api = RedPrint('book') @api.route('/create') def create_book(): return 'create_book' @api.route('/get') def get_book(): return 'get_book' ------------------------------------------------------ from app.libs.redprint import RedPrint api = RedPrint('user') # url /v1/user/create @api.route('/create') def create_user(): return 'create_user' @api.route('/get') def get_user(): return 'get_user'
在 v1/init.py 注册 redprint
from flask import Blueprint from app.api.v1 import book from app.api.v1 import user def create_blueprint_v1(): """ 创建 blueprint 并对 自定义的 redprint进行注册 :return: """ bp_v1 = Blueprint("v1",__name__) book.api.register(bp_v1, url_prefix='/book') user.api.register(bp_v1, url_prefix='/user') return bp_v1
新建 ginger/app.py文件,flask核心对象相关的初始化的操作
tips:进入之后,可能包不能导入,需要自己手动确认设置虚拟环境
from flask import Flask def register_blueprint(app): from app.api.v1 import create_blueprint_v1 blueprint = create_blueprint_v1() app.register_blueprint(blueprint, url_prefix='/v1')def create_app(): app = Flask(__name__) # 导入配置文件 app.config.from_object('app.config.settings') app.config.from_object('app.config.secure') # 注册blueprint register_blueprint(app) return app
其他相关
from flask import Flask app = Flask(__name__) # 导入配置文件,导入的是模块,app.config 是dict的子类 app.config.from_object('config') # 定义路由规则 @app.route("/hello/") #这种方式底层也是通过 add_url_rule实现的 def hello(): # 这种方式为函数视图 # 另外一种基于类的视图(即插视图),可以复用便于扩展 return "hello word" # 启动,配置debug=true表明为debug模式,每次修改代码保存之后,会列出详细错误信息,服务器会自动重启,不用自己手动重启 # 这种方式的话不能被外网,局域网访问,只能通过 127.0.0.1这种方式访问 # 将host =‘0.0.0.0’的方式支持外网访问 # if 中的语句只在入口文件中执行 if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=app.config['DEBUG'])
URL配置说明
url配置为 "/hello/",可以兼容 url为hello,和url为hello/ 的情况,这种方式flask是通过 url重定向来实现的, 为了是保证url的唯一性,跟seo的优化有关系. 一般直接配置为 /hello def hello():这种为函数视图的方式,还有另外一种方式,为基于类的视图(即插视图),基于类可以复用便于扩展
路由注册方式
#这种方式为装饰器的方式,查看源码底层也是采用的是 app.add_url_rule这种方式注册的 @app.route("/hello/") #直接配置注册的方式,基于类的视图这种,必须是这种方式 app.add_url_rule('/hello',view_func=hello)
app.run()参数
默认的app.run(debug=True),这种方式是不能被外网,局域网访问,只能通过127.0.0.1这种方式访问 将host修改为 '0.0.0.0',可以允许外网访问,可以指定端口 app.run(host='0.0.0.0',port=5000,debug=True)
统一配置文件:一般的环境切换更改等方式通过配置文件的方式来,不易出错
创建配置文件 config.py
#config.py 配置示例 # encoding: utf-8 DEBUG =True 一种方式:直接导入的方式 from config import DEBUG app.run(debug=TEBUG) 导入模块的方式,注意路径,此时 config文件与 app同级,推荐这种方式 app.config.form_object('config') **tips** 通过app.config 导入的方式,获取值的时候 key 必须大写,app.config['DEBUG'],否则会出错. app.config['DEBUG'],即使在配置文件没有配置该 DEBUG,打印的时候 也会有值 false ,因为 DEBUG 是在app.config 默认参数, 如果要覆盖该 DEBUG值,在配置文件中必须大写
tips:可能存在需要导包的情况,需要设置虚拟环境
file->settings->procject->project interpreter ->选择对应的虚拟环境即可
Restful
实际经验区分:
标准的restful 适合对外提供,不用考虑太多的业务逻辑
在内部项目中,如有多个资源,需要同时操作,那需要多次的 http请求,而且对资源的设计需要很高的要求。
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试