pythonflask configlist.py_Flask 环境配置及项目的初始化(一)

项目环境配置

安装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值,在配置文件中必须大写

if name == 'main'的作用

保证app.run()只会在入口执行,如果该文件被其他的模块导入的话,避免执行app.run(),在生产的环境中,一般是通过nginx+uwsgi来实现的,那么有该语句,当执行该模块时,app.run()就不会执行,不会开启flask的测试服务器.

tips:可能存在需要导包的情况,需要设置虚拟环境

file->settings->procject->project interpreter ->选择对应的虚拟环境即可

Restful

实际经验区分:

标准的restful 适合对外提供,不用考虑太多的业务逻辑

在内部项目中,如有多个资源,需要同时操作,那需要多次的 http请求,而且对资源的设计需要很高的要求.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值