目录结构
- MyFirstFlaskProject
- APP
- Configure_files
configure.py
- Public_functions
DBHelper.py
- Route
- Sub_route
login_page_route.py
main_route.py
- Services
LoginPage.py
- Test
test.py
app.py
run.py
configure.py
# flask 配置信息
HOST = '0.0.0.0'
PORT = 9999
app.py
from flask import Flask # 引入Flask类, Flask类实现了一个应用
from flask_cors import CORS # 引入CORS, 解决跨域问题
# 实例化 flask 对象, 创建 Flask 的 主app
# app_flask 是 Flask 的实例, 它接收包或者模块的名字作为参数, 但一般都是传递 __name__
# 让 flask.helpers.get_root_path 函数通过传入这个名字确定程序的根目录, 以便获得静态文件和模板文件的目录
app_flask = Flask(__name__)
CORS(app_flask, supports_credential=True)
if __name__ == '__main__':
pass
main_route.py
from APP.app import app_flask # 引入Flask框架构建的app_flask
from APP.Route.Sub_route.login_page_route import login_page
# 将蓝图注册到app, app是Flask的实例
# 将添加进来的蓝图继续地添加到所创建的主app中
# url_prefix : 指定蓝图的url前缀, 若注册蓝图和定义蓝图的url不一致, 以注册蓝图为准, 两个地方同时指定 url_prefix 时不是路由的拼接
app_flask.register_blueprint(login_page, url_prefix="/login")
# 使用 app_flask.route 装饰器会将 URL和执行的视图函数的关系 保存到 app.url_map 属性上
# 处理URL和视图函数的关系的程序就是路由, 这里的视图函数就是index
@app_flask.route("/")
def index():
return "INDEX, 我是 main_route.py 的 @app_flask.route(\"/\")"
login_page_route.py
from flask import Blueprint, redirect, request
import json
login_page = Blueprint('login_page', __name__)
@login_page.route("/login/", methods=['POST', 'GET'])
def login():
if request.method == 'POST':
if request.is_json and request.get_json():
request_json = request.get_json()
print(request_json)
return '后端login接口返回的数据'
else:
return '请求方式必须为POST'
return '请求方式必须为POST'
run.py
# -*- encoding : utf8 -*-
# the main API of running the whole project
from APP.Configure_files.configure import HOST, PORT
from APP.Route.main_route import *
# 执行 app_flask.run 就可以启动项目
# 默认 Flask 只监听虚拟机的 本地127.0.0.1 这个地址, 端口为5000
# 而本项目对虚拟机做的端口转发端口是9998, 所以需要制定host和port参数, 0.0.0.0表示监听所有地址, 这样就可以在本机进行访问
# 服务器启动后, 会调用 werkzeug.serving.run_simple 进入轮询, 默认使用单进程单线程的 werkzeug.serving.BaseWSGIServer 处理请求
# 实际上还是使用标准库 BaseHTTPServer.HTTPServer, 通过 select.select 做0.5秒的 "while TRUE" 的事件轮询
# 当访问"http://127.0.0.1:9998/", 通过app.url_map找到注册的"/"这个模式
# 找到了对应的index()函数执行, 返回"INDEX, 我是 main_route.py 的 @app_flask.route('/')", 状态码为200
# 如果访问一个不存在的路径, 如访问"http://127.0.0.1:9998/a", 找不到对应的模式, 就会向浏览器返回"Not Found", 状态码为404
if __name__ == '__main__':
# print('===+++===')
app_flask.config["JSON_AS_ASCII"] = False
app_flask.run(
host=HOST,
port=PORT,
debug=True # 开发环境debug一般是开启, 生产环境要关闭debug
# 多线程
)