Flask是一个轻量级,灵活和Python微框架。它由Werkzeug工具箱和Jinja2模板引擎构建。Flask被广泛应用于Web应用程序开发中,其设计简单,易于扩展,并且非常适合小型应用程序的开发和快速原型设计。下面是Flask的一些基本概念和使用场景:
基本概念:
1.路由(Route):Flask应用程序中的路由是指响应URL请求的函数。当输入特定的URL(或URI)时,Flask调用相应的函数并返回结果。
2.视图(View):Flask中的视图是指路由函数,用于处理特定URL请求并返回响应。
3.模板(Template):Flask使用Jinja2模板引擎渲染动态Web页面。
4.请求(Request):Flask使用请求对象来处理HTTP请求。
5.响应(Response):Flask使用响应对象来生成HTTP响应。
6.会话(Session):Flask使用会话对象来存储和获取用户特定的数据。
使用场景:
1.开发RESTful API:Flask是一种轻量级并且易于使用的框架,因此非常适合开发RESTful API。
2.构建小型Web应用程序:Flask一直被认为是构建小型Web应用程序的理想框架,因为它的设计简单,易于使用,且可以快速进行原型设计。
3.构建静态网站:有些用户使用Flask框架来构建静态网站,因为它可以轻松地将静态文件聚合在一起。
4.简化开发流程:Flask允许您快速开发应用程序,而无需担心太多的复杂性和配置。
1、搭建
pycharm创建一个项目,打开项目
配置环境
在pycharm的终端上运行命令,安装Flask
pip install flask
在main.py开始写入口和路由
from flask import Flask, send_file, render_template, jsonify, request
from views import AdminView, BkUser
@app.route('/')
def index():
return render_template('index.html')
@app.route("/upload_file", methods=['POST', ]) # 上传图片
def upload_file() -> jsonify: return getattr(UploadFile, request.method.lower())(request)
# 后台管理系统路由
# 后台账号
@app.route('/admin', methods=['POST', 'PUT'])
def admin() -> jsonify: return getattr(AdminView, request.method.lower())(request)
# 用户管理
@app.route('/bkuser', methods=['GET', 'POST', 'PUT', 'DELETE'])
def bkuser() -> jsonify: return getattr(BkUser, request.method.lower())(request)
if __name__ == '__main__':
app.run(port=8000, host='0.0.0.0')
新建view.py文件编写业务逻辑
import json
import os
import random
import string
import time
import requests
from flask import jsonify, request, Flask, send_file, render_template
# 配置跨域
from flask_cors import CORS
from model import User, SerializerMethodFields, Admin, KeFu, MoXingType, MoXing, Task
from loguru import logger
app = Flask(__name__, template_folder='./static', static_folder='./static', static_url_path='')
CORS(app, supports_credentials=True)
BASE_DIR = os.path.dirname(__file__) # 当前主项目路径
MEDIA_PATH = os.path.join(BASE_DIR, 'media') # 当前项目媒体资源文件路径
@app.before_request
def process_request(*args, **kwargs):
'''自定义动态媒体资源中间件'''
if '/media/' in request.path:
request_path, filename = os.path.split(request.path)
return send_file(os.path.join(MEDIA_PATH, filename))
elif request.path in ('', '/'):
return render_template('index.html')
class UploadFile(object):
'''上传图片'''
@staticmethod
def post(_request, *args, **kwargs) -> jsonify:
'''
上传图片
{
“file”: fileIO
}
'''
file = request.files.get('file')
_, ext = os.path.splitext(file.filename)
if ext not in ('.png', '.PNG', '.jpg', '.JPG'):
return jsonify({'code': 500, 'msg': '仅支持png和jpg格式'})
filename = str(int(time.time())) + str(ext)
file_abs_path = f'{MEDIA_PATH}/{filename}'
logger.success(f'文件上传路径为:{file_abs_path}')
file.save(file_abs_path)
return jsonify({'code': 0, 'msg': 'success', 'path': f'/media/{filename}'})
# 后台管理逻辑
class AdminView(object):
"""
后台管理员
"""
@staticmethod
def post(request, *args, **kwargs):
admin = Admin.get_queryset(**json.loads(request.data))
data = SerializerMethodFields().serializer(admin, many=False)
return jsonify({'code': 0, 'msg': 'success', 'data': data} if data else {'code': 500, 'msg': '账号密码错误'})
@staticmethod
def put(request, *args, **kwargs):
data = json.loads(request.data)
Admin.update({'admin_id': data.get('admin_id')}, data)
return jsonify({'code': 0, 'msg': 'success'})
class BkUser(object):
"""
后台管理用户账号
"""
@staticmethod
def get(request, *args, **kwargs):
page, size = int(request.args.get('page', 1)), int(request.args.get('size', 10))
user = User.get_queryset()
count = user.count()
data = SerializerMethodFields().serializer(user, many=True, page=page, size=size)
return jsonify({'code': 0, 'msg': 'success', 'data': data, 'count': count})
@staticmethod
def post(request, *args, **kwargs):
data = json.loads(request.data)
if User.get_queryset(**{'username': data.get('username')}).count():
return jsonify({'code': 500, 'msg': '账号已存在,请更改账号名称'})
User.create(**data)
return jsonify({'code': 0, 'msg': 'success'})
@staticmethod
def put(request, *args, **kwargs):
data = json.loads(request.data)
User.update({'user_id': data.get('user_id')}, data)
return jsonify({'code': 0, 'msg': 'success'})
@staticmethod
def delete(request, *args, **kwargs):
data = json.loads(request.data)
User.delete({'user_id': data.get('user_id')})
return jsonify({'code': 0, 'msg': 'success'})
运行main.py即可运行项目