首页 文章 精选 留言 我的

精选列表

搜索[后台会话],共10000篇文章
优秀的个人博客,低调大师

ulthon_admin v2.0.19 发布,PHP 后台快速开发框架

本次发行版中,优化了底层建设的代码,并实现了一个强大的特性(对我来说如此): 从数据库生成数据库迁移代码 用法 什么是数据库迁移工具 ulthon_admin标准的安装流程是使用数据库迁移工具进行安装,他不仅可以安装到mysql数据库,也支持sqlite,sqlserver等其它数据库。 具体用法参考文档: https://www.kancloud.cn/manual/thinkphp6_0/1118028 但一般而言,我们开发中不会从写迁移代码开始,而是直接使用顺手的数据库工具(Dbeaver、Navcat等)设计数据库,然后在开发中修修补补。 这并没有什么不妥,但是如果你做的是一个标准产品,需要经常执行安装和更新,需要给多个客户部署时,就会感到吃力。 遇到这种情况,你只能从一个数据库导出,再导入到另一个数据库,反反复复的操作。还有可能不知道哪个是最新的,哪个需要更新,哪个更新到哪个版本了。 另一方面,如果数据库丢失了,而你手里又没有及时备份,那么也是很头疼的事。 数据库迁移工具就是为了解决以上种种问题的,比如我们需要新建一张test_goods数据表,我们可以使用数据库迁移工具,写出这样的代码: <?php use think\migration\Migrator; use think\migration\db\Column; class TestGoods extends Migrator { public function change() { $table = $this->table('test_goods') ->setComment('商品列表') ->addColumn('cate_id', 'biginteger', ['limit' => '20', 'signed' => '0', 'null' => '0', 'default' => '0', 'comment' => '分类ID {relation} (table:mall_cate,relationBindSelect:title)',]) ->addColumn('title', 'char', ['limit' => '20', 'null' => '0', 'default' => '', 'comment' => '商品名称',]) ....... ->addColumn('detail', 'text', ['null' => '1', 'comment' => '详情',]) ->addIndex('uid', ['unique' => true]) ->addIndex('detail', ['type' => 'fulltext']) ->addIndex('cate_id') ->create(); } } 然后运行命令: php think migrate:run 此时这张表就出现在我们的数据库了,至于其他的表,并不会覆盖或丢失。 这样有很多好处: 数据库跟随版本库存储不会丢失 没有反复多余的导出数据库 可以安装到“任何数据库” 任何标准产品都可以任意运行该命令用于升级数据库 但是我们开发的时候,不会直接写数据迁移工具,而是从设计表开始。如果我们需要数据库迁移工具,就只能照着现在的数据表写迁移工具,这是以前的做法,也只能这样做。但是现在不一样了,通过一行命令可以一键生成数据库迁移的代码。就像生成curd那样。 现在按照我们的介绍看看怎么用吧。 使用 我们先用自己喜欢的方式设计出一张表。 -- admin_demo_ultho.ul_test_goods definition CREATE TABLE `ul_test_goods` ( `id` int(11) NOT NULL AUTO_INCREMENT, `cate_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '分类ID {relation} (table:mall_cate,relationBindSelect:title)', `title` char(20) NOT NULL DEFAULT '' COMMENT '商品名称', `logo` char(255) NOT NULL COMMENT '商品logo {image}', `images` text NOT NULL COMMENT '商品图片 {images}', `describe` text NOT NULL COMMENT '商品描述 {editor}', `total_stock` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '总库存', `sort` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '排序', `status` int(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态 {radio} (0:正常,1:禁用)', `cert_file` varchar(100) NOT NULL COMMENT '合格证 {file}', `verfiy_file` text NOT NULL COMMENT '检测报告 {files}', `remark` char(255) NOT NULL DEFAULT '' COMMENT '备注说明', `create_time` int(11) unsigned NOT NULL DEFAULT '0', `update_time` int(11) unsigned NOT NULL DEFAULT '0', `delete_time` int(11) unsigned NOT NULL DEFAULT '0', `publish_time` int(10) unsigned NOT NULL COMMENT '发布日期 {date} (date)', `sale_time` bigint(20) unsigned NOT NULL COMMENT '售卖日期 {date} (datetime)', `intro` varchar(100) NOT NULL COMMENT '简介 {textarea}', `time_status` smallint(5) unsigned NOT NULL COMMENT '秒杀状态 {select} (0:未参加,1:已开始,3:已结束)', `is_recommend` tinyint(4) NOT NULL COMMENT '是否推荐 {switch} (0:不推荐,1:推荐)', `shop_type` varchar(100) NOT NULL COMMENT '商品类型 {checkbox} (taobao:淘宝,jd:京东)', `tag` varchar(100) NOT NULL COMMENT '商品标签 {table} (table:mall_tag,type:checkbox,valueField:id,fieldName:title)', `tag_backup` varchar(100) DEFAULT NULL COMMENT '商品标签(单选) {table} (table:mall_tag,type:radio,valueField:id,fieldName:title)', `from_area` varchar(100) NOT NULL COMMENT '产地 {city} (name-province:0,code:0)', `store_city` varchar(100) NOT NULL DEFAULT '山东省/临沂市' COMMENT '仓库 {city} (level:city)', `tag_input` varchar(100) NOT NULL COMMENT '商品标签 (输入) {tag}', `uid` varchar(100) NOT NULL COMMENT '唯一id', `price` decimal(10,2) DEFAULT NULL COMMENT '价格', `detail` longtext COMMENT '详情', PRIMARY KEY (`id`), UNIQUE KEY `ul_test_goods_uid_IDX` (`uid`) USING BTREE, KEY `cate_id` (`cate_id`) USING BTREE, FULLTEXT KEY `ul_test_goods_detail_IDX` (`detail`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='商品列表'; 面对这样一张数据表,如果我们要对照写出数据库迁移工具的代码,会很费事,而且很容易就写错了。 但现在时代变了,只需要一行命令 php think curd:migrate -t test_goods 此时会在数据库迁移工具的工作目录下生成一个文件: database\migrations\20220905222557_test_goods.php 这跟使用官方的生成方式一致 此时会直接生成开头那样的数据库迁移代码。 结尾 可能你没用过数据库迁移工具,那么目前可能无法引起你的兴趣,(建议使用),如果你正在使用,那么这个命令绝对能给你带来极大的便利。甚至可以让那些拥有几十个数据表的项目,也能轻松地使用数据库迁移工具来安装了。 ulthon_admin正在积极维护,拥有极高的定制性,支持依赖裁剪,精简代码,欢迎使用。

优秀的个人博客,低调大师

基于Flask开发网站 -- 前端Ajax异步上传文件到后台

大家好,我是辰哥~ 辰哥最近利用空闲时间在写一个在线可视化平台,过程中也觉得一些技术还是比较有意思的,所以就以模块化的形式分享出来。如:从网页界面(前端)上传文件到服务器(后端)。 放一下该模块的界面图瞧一瞧: 点击上传excel文件按钮,选择excel文件后可以在线预览,并且后端接收保存到服务器,本文主要是分享上传文件这块内容。 背景:前端是html,后端使用Flask框架,在前端点击上传一个excel文件,后端接收并保存到本地。 01 前端处理 1.文件选择框 相信写过html代码的都知道,上传文件控件最简单的是html默认的(非使用插件的情况) <input id="file" name="loadfile" type="file"> 文件选择框的id是file,类型是file,通过id去调用js异步代码,类型是指定input是选择本地文件。 这样就定义好一个文件选择框。 2.Ajax异步处理 在使用Ajax异步之前,需要引入Jquery文件 <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.5.1.min.js"></script> 异步代码: $('#file').change(function (e) { var files = e.target.files; var formFile = new FormData(); formFile.append("file", files[0]); //加入文件对象 $.ajax({ url: "/upload_file", data: formFile, type: "post", dataType: "json", cache: false,//上传文件无需缓存 processData: false,//用于对data参数进行序列化处理 这里必须false contentType: false, //必须 success: function (result) { alert("上传完成!"); }, }) }); 点击网页的上传excel文件按钮,选择好excel文件之后,自动触发上述的js代码(通过id:file去触发指定js代码) > 简单介绍: > > (1)e.target.files:选择上传的文件 > > (2)FormData:将上传文件封装到FormData中 > > (3)/upload_file:后端上传的接口(接收文件的入口) 这段js代码的作用就是将选择好的excel文件,上传到后端接口:/upload_file,后端处理完毕之后返回响应值:result,网页提示:上传完成。 02 后端处理 后端使用Python去编写,用的是Flask框架,如果还不明白的flask的简单使用的,可以参考辰哥之前的一篇文章:Flask结合ECharts实现在线可视化效果,超级详细! 这里辰哥直接带大家看后端接口,详细的完整源码,辰哥会在文末直接给出。 # 上传文件 @app.route('/upload_file', methods=['POST']) def upload(): if request.method == 'POST': f = request.files['file'] basepath = os.path.dirname(__file__) # 当前文件所在路径 print(f.filename) ####################################### # 毫秒级时间戳 file_name = str(round(time.time() * 1000)) dir = str(time.strftime('%y%m%d', time.localtime())) upload_path = os.path.join(basepath, 'uploads/'+dir) # 判断文件夹是否存在 if not os.path.exists(upload_path): os.mkdir(upload_path) ####################################### file_path = str(file_name)+str(f.filename) f.save(upload_path+"/"+file_path) return Response(json.dumps(file_path), mimetype='application/json') 简单说明: (1)接口名称是:/upload_file,接受的请求方式是:post; (2)request.files['file']:接收上传的文件; (3)6~16行:在upload文件夹下自动创建以当天日期命名的文件夹,作为保存上传文件的存储路径; (4)file_name:是当前毫秒级时间戳,对上传的文件重命名:时间戳+原文件名; (5)Response返回文件路径到前端异步处理函数success:file_path; 03 效果 前端和后端都处理完毕后,开始调试程序。看看具体效果。 以上就是前端Ajax异步上传文件到后端的内容。 > 完整的源码地址: > > https://wwi.lanzoui.com/imM6bs2f44d 最后说一声:原创不易,求给个赞!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册