Python---Flask的应用

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即可运行项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值