海报生成器源码(Python版)

news2025/1/10 11:52:53

海报生成器源码(Python版)

  • 效果图
  • 部分源码
  • 领取源码
  • 下期更新预报

效果图

在这里插入图片描述
在这里插入图片描述

部分源码

from flask import Flask, Response, request
from flask_cors import CORS
from flask_uploads import UploadSet, configure_uploads, IMAGES, patch_request_class

import C
import R
import dao
import poster
import key

app = Flask(__name__, static_url_path='')
logger = app.logger

# 跨域配置
CORS(app, supports_credentials=True)

# 上传配置
app.config['UPLOADED_PHOTOS_DEST'] = C.STORE_UPLOAD  # 文件储存地址
photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)
patch_request_class(app)  # 文件大小限制,默认为16MB


@app.route('/')
def index():
    """
    重定向首页
    :return:
    """
    return app.send_static_file('index.html')


@app.route('/api/login', methods=['POST'])
def login():
    """
    登录
    :return:
    """
    accessKey = request.form['accessKey']
    secretKey = request.form['secretKey']
    if key.check(accessKey, secretKey):
        token = C.code(32)
        dao.save_token(token)
        return R.ok('登录成功').add('token', token).add('user', {'accessKey': accessKey, 'secretKey': secretKey}).json()
    else:
        return R.error('accessKey or secretKey not match!').json()


@app.before_request
def check_token():
    """
    检查token
    :return:
    """
    path = request.path
    filter_list = ['/api/user/posters']
    ignore = True
    for w in filter_list:
        if w in path:
            ignore = False
            break
    if ignore:
        return
    t = request.headers.get('token', None)
    if not t:
        return R.expire('没有token').json()
    dbtoken = dao.query_token(t)
    print(f'token判断: path={path}, token={t}, dbtoken={dbtoken}')
    if not dbtoken:
        return R.expire().json()


@app.route('/api/user/posters', methods=['GET'])
def query_user_posters():
    posters = dao.query_user_posters()
    return R.ok().add('posters', posters).json()


@app.route('/api/user/posters', methods=['POST'])
def save_or_update_user_poster():
    id = dao.save_or_update_user_poster(request.get_json())
    return R.ok().add("id", id).json()


@app.route('/api/user/posters/<id>', methods=['DELETE'])
def delete_user_posters(id):
    dao.db_delete_poster(int(id))
    return R.ok().json()


@app.route('/api/user/posters/copy/<id>', methods=['POST'])
def copy_user_poster(id):
    id = dao.copy_user_poster(id)
    return R.ok().add("id", id).json()


@app.route('/api/upload', methods=['POST'])
def upload_file():
    name = C.code(16)
    filename = photos.save(request.files['file'], name=name + '.')
    # filename = photos.save(request.files['file'], name=name)
    path = photos.path(filename)
    path = C.get_url_path(path)
    return R.ok().add("url", path).json()


@app.route('/api/link', methods=['POST'])
def get_link():
    """获取分享链接"""
    # TODO: 接口参数校验
    # print("获取分享链接")
    param = request.get_json()
    if not key.check(param['accessKey'], param['secretKey']):
        return R.error('accessKey or secretKey not match').json()
    return dao.get_share_link(param)


@app.route('/view/<string:code>', methods=['GET'])
def view(code: str):
    """通过分享链接访问"""
    # print('通过分享链接访问 code=' + code)
    code = code[:code.index('.')]
    # print('通过分享链接访问 code=' + code)
    data = dao.find_share_data(code)
    if data is None:
        # TODO: 返回一张提示图片
        return 'dfs'
    return resp_poster_img(data)


@app.route('/api/preview', methods=['POST'])
def preview():
    """预览"""
    logger.info('预览')
    data = request.get_json()
    return resp_poster_img(data)


def resp_poster_img(data):
    """返回海报图片"""
    buf, mimetype = poster.drawio(data)
    resp = Response(buf, mimetype=mimetype)
    resp.add_etag()
    resp.automatically_set_content_length = True
    resp.headers.add('Cache-Control', 'max-age=60')
    # resp.headers.add('Access-Control-Allow-Origin', '*')
    logger.info('请求返回了')
    return resp


if __name__ == '__main__':
    # app.run(host="0.0.0.0", port=9001, debug=True)
    app.run(host="0.0.0.0", port=9001, debug=True, threaded=False, processes=2)
    print('启动...')

领取源码

源码地址:海报生成器源码(Python版)

下期更新预报

影视管理系统(高级版)

  • 📢博客主页:孤客网络科技工作室官方账号
  • 📢欢迎点赞👍收藏⭐️留言 📝如有错误敬请指正!
  • 📢本文由孤客原创,若侵权联系作者,首发于CSDN博客
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更好的生活💻

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1636123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字文旅重塑旅游发展新生态:以数字化转型为契机,推动旅游产业的创新发展,提升旅游服务的智能化、网络化和个性化水平

目录 一、引言 二、数字化转型推动旅游产业创新发展 1、数字化转型提升旅游产业效率 2、数字化转型拓展旅游产业边界 3、数字化转型促进旅游产业可持续发展 三、提升旅游服务智能化、网络化和个性化水平 1、智能化提升旅游服务体验 2、网络化拓宽旅游服务渠道 3、个性…

mac/windows下安装docker,minikube

1、安装docker Get Started | Docker 下载安装docker 就行 启动后&#xff0c;就可以正常操作docker了 使用docker -v 验证是否成功就行 2、安装minikube&#xff0c;是基于docker-desktop的 2.1、点击设置 2.2、选中安装&#xff0c;这个可能需要一点时间 这样安装后&…

ESP32-C3第二路串口(非调试)串口打通(1)

1. 概述与引脚复用 《ESP32-C3 系列芯片技术规格书》中提到&#xff0c;ESP32-C3系列芯片中有两路串口。 第1路串口就是常用的调试串口&#xff0c;在笔者使用的ESP32-C3-DevKitC-02开发板中&#xff0c;这一路串口通过CP2102 USB转UART桥芯片与电脑的USB口相连接&#xff0c;…

让大模型prompt生成Mermaid流程图

生成内容、总结文章让大模型Mermaid流程图展示&#xff1a; mermaid 美人鱼, 是一个类似 markdown&#xff0c;用文本语法来描述文档图形(流程图、 时序图、甘特图)的工具&#xff0c;您可以在文档中嵌入一段 mermaid 文本来生成 SVG 形式的图形 kimi效果示例&#xff1a; 使用…

人工电销机器人在销售行业中的重要性和作用,以及未来市场的发展前景

在追求更高效、更智能的时代&#xff0c;各行各业都在积极寻求新技术、新应用来提升业务流程的效率和质量。对于销售行业而言&#xff0c;人工电销机器人已经成为越来越受欢迎的工具之一。我们将深入探讨人工电销机器人在销售行业中的重要性和作用&#xff0c;以及未来市场的发…

[学习笔记]CyberDog小米机器狗 开发学习

1、机器狗本身是UbuntuROS2系统 2、控制机器人只需要了解lcm和Ros topic通讯 3、传感器数据&#xff08;包括一些imu(/imu)、激光雷达(/scan)&#xff09;会进行topic的一个广播。 仿真环境通信接口&#xff1a; -命令输入(见后续运控说明) 运控lcm数据接口 Motion man…

探索未来工业:数字化智能巡检系统的革命性应用

随着科技的飞速发展&#xff0c;数字化智能巡检系统正逐渐成为工业生产中的一项重要利器。这一系统结合了数字化技术和人工智能&#xff0c;为企业提供了高效、精准的设备巡检和监控方案&#xff0c;极大地提升了生产效率和设备安全性。本文将深入探讨数字化智能巡检系统的革命…

神经网络与深度学习(四)--自然语言处理NLP

这里写目录标题 1.序列模型2.数据预处理2.1特征编码2.2文本处理 3.文本预处理与词嵌入3.1文本预处理3.2文本嵌入 3.RNN模型3.1RNN概要3.2RNN误差反传 4.门控循环单元&#xff08;GRU&#xff09;4.1GRU基本结构 5.长短期记忆网络 (LSTM) 1.序列模型 分类问题与预测问题 图像分…

css div块标签内的多个英语单词怎样设置换行

背景&#xff1a; 在<div>标签内&#xff0c;当接口返回的字符串全是英文字母&#xff0c;不会自动换行。 原因&#xff1a;查过相关资料后才知道&#xff0c;只有英文文本才会出现不能自动换行的情况&#xff0c;&#xff08;中文不存在&#xff09;而原因是因为英文文本…

【Qt之OpenGL】01创建OpenGL窗口

1.创建子类继承QOpenGLWidget 2.重写三个虚函数 /** 设置OpenGL的资源和状态,最先调用且调用一次* brief initializeGL*/ virtual void initializeGL() override; /** 设置OpenGL视口、投影等&#xff0c;当widget调整大小(或首次显示)时调用* brief resizeGL* param w* para…

Windows10 22H2 X64 官方正式版【四月更新】

微软向Win10用户推出四月可选更新补丁KB5036979&#xff0c;用户更新完成版本号升级为19045.4355。本次更新新增微软账号相关通知&#xff0c;用户可以通过微软账号管理多台 Windows 设备&#xff0c;以及设备上运行的应用程序。另外此版本还修复并解决了一系列问题&#xff0c…

Baidu Comate:“AI +”让软件研发更高效更安全

4月27日&#xff0c;百度副总裁陈洋出席由全国工商联主办的第64届德胜门大讲堂&#xff0c;并发表了《深化大模型技术创新与应用落地&#xff0c;护航大模型产业平稳健康发展》主题演讲。陈洋表示&#xff0c;“人工智能”成为催生新质生产力的重要引擎&#xff0c;对于企业而言…

BiLSTM-KDE的双向长短期记忆神经网络结合核密度估计多变量回归区间预测(Matlab)

BiLSTM-KDE的双向长短期记忆神经网络结合核密度估计多变量回归区间预测&#xff08;Matlab&#xff09; 目录 BiLSTM-KDE的双向长短期记忆神经网络结合核密度估计多变量回归区间预测&#xff08;Matlab&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.BiLS…

【Hadoop】-Hive客户端:HiveServer2 Beeline 与DataGrip DBeaver[14]

HiveServer2 & Beeline 一、HiveServer2服务 在启动Hive的时候&#xff0c;除了必备的Metastore服务外&#xff0c;我们前面提过有2种方式使用Hive&#xff1a; 方式1&#xff1a; bin/hive 即Hive的Shell客户端&#xff0c;可以直接写SQL方式2&#xff1a; bin/hive --…

多线程基础知识(全面):创建线程、线程状态如何变化、wait()、notify()、sleep()、停止线程

文章目录 一、创建线程的四种方式1.1 继承Thread类1.2 实现runnable接口1.3 实现Callable接口1.4 线程池创建线程1.5 补充&#xff1a;runnable、callable都可以创建线程&#xff0c;有什么区别&#xff1b;run()和 start()有什么区别 二、线程包括哪些状态、状态之间如何变化2…

STL——stackqueue

stack stack即为栈&#xff0c;先进后出是其特点 栈只有栈顶元素能被外界使用&#xff0c;故不存在遍历行为 栈中常用接口 构造函数 stack<T> stk; //默认构造方式 stack(const stack &stk); //拷贝构造 赋值操作 stack& operator(const stack &stk); …

用HTML5实现播放gif文件

用HTML5实现播放gif文件 在HTML5中&#xff0c;你可以使用<img>标签来播放GIF文件。GIF文件本质上是一种图像格式&#xff0c;它支持动画效果&#xff0c;因此当在网页上加载时&#xff0c;它会自动播放动画。先看一个简单的示例&#xff1a; <!DOCTYPE html> &l…

设计模式第二次测试 | 数据库连接池设计(原型模式、创建者模式、适配器模式)

需求中文如下&#xff1a;原本是英文&#xff0c;用百度翻译转换而来 我们需要设计一个工具&#xff0c;它负责创建一个与数据库软件MySQL的连接池。 连接池中有数百个连接可供客户端使用。 所有连接对象都有相同的内容&#xff0c;但它们是不同的对象。 连接对象的创建是资源密…

笔记-word导出PDF老是更新域导致图片和表格题注发生变化

问题描述&#xff1a;微软word 导出PDF时&#xff0c;老是更新域&#xff0c;导致图片和表格题注否跟着变化 以下是解决方法的具体描述。 目录 一、准备工作二、操作步骤 一、准备工作 1、工具版本&#xff1a;微软 word 2016&#xff08;其他微软word版本也OK&#xff09; …

Oracle索引组织表与大对象平滑迁移至OceanBase的实施方案

作者简介&#xff1a;严军(花名吉远)&#xff0c;十年以上专注于数据库存储领域&#xff0c;精通Oracle、Mysql、OceanBase&#xff0c;对大数据、分布式、高并发、高性能、高可用有丰富的经验。主导过蚂蚁集团核心系统数据库升级&#xff0c;数据库LDC单元化多活项目&#xff…