一. 项目文件树如下
1.创建工具类包 utils, 并在里面创建__init__.py文件用于存放初始化app的函数
__init__.py文件设置如下:
import os
from flask import Flask
from App.views import blue
def create_app():
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
templates_dir = os.path.join(BASE_DIR, 'templates')
static_dir = os.path.join(BASE_DIR, 'static')
app = Flask(__name__, static_folder=static_dir, template_folder=templates_dir)
app.register_blueprint(blueprint=blue, url_prefix='/hello') # 将app交由blue管理
return app
在manage.py文件中创建启动文件方式并使用项目管理器进行管理app,设置代码如下:
from flask_script import Manager
from utils import create_app
# 初始化,__name__代表主模块名或者包
app = create_app()
manager = Manager(app=app)
if __name__ == '__main__':
manager.run()
在工程项目App下的views.py为视图模块,设置如下:
import uuid
from flask import render_template, request, make_response, redirect, url_for, abort
from flask import Blueprint
blue = Blueprint('first', __name__)
# 主要用来处理业务逻辑, 以下函数为传递的各种参数类型与传递方式!
@blue.route('/', methods=['GET', 'POST'])
def hello():
# 视图函数
return 'Hello World'
@blue.route('/hello/<name>')
def hello_man(name):
print(name)
print(type(name))
return 'hello name:%s type:%s ' % (name, type(name))
@blue.route('/helloint/<int:id>')
def hello_int(id):
print(id)
print(type(id))
a = 'wanghaifei'
return 'hello int:%s' % (id)
@blue.route('/getfloat/<float:price>')
def hello_float(price):
return 'float:%s' % price
@blue.route('/getstr/<string:name>')
def hello_name(name):
return 'string:%s' % name
@blue.route('/getpath/<path:url_path>') # 与string的区别是可以匹配到'/', 也是当做字符串返回, 而string则不行
def hello_path(url_path):
return 'url_path:%s' % url_path
@blue.route('/getuuid/') #必须加两个斜杠
def hello_get_uuid():
a = uuid.uuid4()
return str(a)
@blue.route('/getbyuuid/<uuid:uuid>') #必须加两个斜杠
def hello_getby_uuid(uuid):
return 'uu:%s' % uuid
启动项目文件方式: -d指的是开启debug模式
python manage.py runserver -h 0.0.0.0 -p 8000 -d
创建static 与 templates 静态文件夹, 结构如下:
views.py文件跳转静态文件方式如下:
@blue.route(r'/index/')
def index():
# return send_file('../templates/hello.html')
return render_template('hello.html')
@blue.route('/getrequest/', methods=['GET', 'POST'])
def get_request():
if request.method == 'GET':
agrs = request.args
elif request.method == 'POST':
form = request.form
return '获取request'
@blue.route('/makeresponse/')
def get_response():
temp = render_template('hello.html')
# response = make_response('<h2>羞羞哒</h2>')
response = make_response(temp, 404)#后面的250是可以自己定义返回的状态码
return response
@blue.route('/redirect/')
def make_redirect():
# 第一种方法
# return redirect('/hello/index/')
# 第二种方法, 跳转到first蓝图下的index路由下
return redirect(url_for('first.index'))
异常终止使用函数abort
@blue.route('/makeabort/')
def make_abort():
abort(404) # 终止,抛出404错误
return '终结'
@blue.errorhandler(404)
def get_error(exception):
return '捕捉异常:%s' % exception
更多内容,可关注作者的微信公众号:胖哥真不错。