开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 8679|回复: 31
打印 上一主题 下一主题
收起左侧

[易语言纯源码] 易语言MVC开发框架

[复制链接]
跳转到指定楼层
楼主
发表于 2018-12-19 19:13:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式   北京市北京市
分享源码
界面截图:
是否带模块: 调用了模块
备注说明: -
本帖最后由 zhao6810 于 2018-12-20 13:51 编辑

易语言MVC开发框架

感谢{
    《卓越网维小邓》提供的HP易语言静态库。
    《kn剑齿虎》SQL生成库。
    《kyozy》提供的HashTable与sqlite3模块。
}


HTTP层基于HPsocket5.3.4实现。

静态编译需要用到VS2010 链接器(20180925) 链接: https://pan.baidu.com/s/1fsxtjFhnAD8GaTHt1ZpXmQ 提取码: aqym

例子简单实现前段与后台。

自动路由规则。

控制器
Route.AddRoute (“/”, ControllerIndex.SumFunAddres (4), 取变量数据地址 (ControllerIndex))
Route.AddRoute (“/index/story”, ControllerIndex.SumFunAddres (5), 取变量数据地址 (ControllerIndex))
Route.AddRoute (“/index/update”, ControllerIndex.SumFunAddres (6), 取变量数据地址 (ControllerIndex))

Route.AddRoute (“/user/index”, ControllerLogin.SumFunAddres (4), 取变量数据地址 (ControllerLogin))
Route.AddRoute (“/user/login”, ControllerLogin.SumFunAddres (5), 取变量数据地址 (ControllerLogin))

Route.AddRoute (“/admin/main”, ControllerUser.SumFunAddres (4), 取变量数据地址 (ControllerUser))
Route.AddRoute (“/admin/index”, ControllerUser.SumFunAddres (5), 取变量数据地址 (ControllerUser))
Route.AddRoute (“/admin/logout”, ControllerUser.SumFunAddres (6), 取变量数据地址 (ControllerUser))  

Route.AddRoute (“/admin/news/index”, ControllerNews.SumFunAddres (4), 取变量数据地址 (ControllerNews))
Route.AddRoute (“/admin/news/add”, ControllerNews.SumFunAddres (5), 取变量数据地址 (ControllerNews))
Route.AddRoute (“/admin/news/addnews”, ControllerNews.SumFunAddres (6), 取变量数据地址 (ControllerNews))
Route.AddRoute (“/admin/news/delnews”, ControllerNews.SumFunAddres (7), 取变量数据地址 (ControllerNews))


注册路由,并且计算出对应地址。并且实现自动调用

每个控制器中第一方法必须是SumFunAddres并且必须公开。第二个参数是方法序号,用于计算控制器内存地址。

序号计算方法{
    _初始化:0
    _销毁:1
    SumFunAddres:2
    Prepare:3
}
所以你的控制器从4开始算。


一个简单的登陆例子
Http 为参考类型,是控制器请求与响应的中间件,里边实现一些基础数据传递。
Prepare (Http)
如果 (This.IsPost ())
    User = This.Post (“user”)
    Pass = This.Post (“pass”)
    User_id = SqlLite3.Wx_User ().Login (User, Pass)
    如果 (User_id ≠ 0)
        SessionId = Session.SessionCreate (User_id, User, Http.Request.ClientIp)
        This.SetCookie (SessionId)
        This.Success (“登陆成功”, “/admin/main”)
        This.Error (“用户名或者密码错误”, “/user/index”)

否则
    This.Error (“用户名或者密码错误”, “/user/index”)


以上为基础逻辑控制

Http.Response.Body = 到字节集 (This.GetTemplateContent ()) 比较关键.将模版内容设置到BODY体中。
This.GetHerder (Http.Response.Herder)        设置Herder头
Http.Response.StateCode = 200

以上为响应体与响应头


视图层支持基础的模版功能 变量分配,模版展示。


M层
只实现了一些基础的SQL语句生成。
例如插入
news.Create_time = Times.Time ()
SQLAction.data (“news_title”).val_Str (news.News_title)
SQLAction.data (“news_content”).val_Str (news.News_title)
SQLAction.data (“create_time”).val_Int32 (news.Create_time)
SQL = SQLAction.Insert (“wx_news”)
返回 (SQLlite.执行SQL (SQL))


删除
SQLAction.Model (“wx_news”)
SQL = SQLAction.where (“news_id = ” + 到文本 (News_ID)).Delete ()
返回 (SQLlite.执行SQL (SQL))



另外还支持设置静态目录,SESSION管理,MIME类型自识别等等。

以前挺喜欢易语言单文件的原代码格式,现在接触语言多了越发多文件的好处实在太多了,比如易语言的“自定义数据类型”如果定义类型过多话,找起来非常麻烦,非常建议老吴给“自定义数据类型”也加个文件夹管理功能吧,做好类型分类,这样做会好很多的。


有过MVC开发经验的简单看看就能看懂我的结构。

易语言缺少很多现代语言的特性,例如反射、动态类等等,连基本的类都是伪类。为了动态调用类遇到了很多坑。比如调用类的时候要带上本对象,然后还得手动初始化局部变量,如果这两件事没做会遇到各种崩溃,之前参考其他易友写的方法,就是各种的崩溃,直到反编译了易语言调用方法。

以上开发的只是初步实现,离可以上线还缺少很多东西,例如SQL注入,Session安全,等等。 做一些简单小网站暂时够用,只要你觉得不嫌麻烦。



调用类方法的过程。

pushad
mov ecx,dword ptr ss:[ebp+10]
push ecx
mov eax,dword ptr ss:[ebp+8]
push eax
eax,dword ptr ss:[esp]
eax,dword ptr ds:[eax]
eax,dword ptr ds:[eax]
mov ecx,dword ptr ss:[ebp+c]
call ecx
popad


开源地址:https://github.com/zhao6810/EhttpServer  欢迎点星星。

点评

正真牛逼有技术含量的东西无人问津,那些垃圾源码却能得到满堂喝彩,这就是易的现状!   重庆市重庆市  发表于 2020-3-9 17:24

评分

参与人数 4好评 +3 精币 +8 收起 理由
修善 + 1 + 1 支持开源~!感谢分享
易语言小白菜 + 1 支持开源~!感谢分享
日勿日勿 + 1 + 1 支持开源~!感谢分享
精易客服 + 1 + 5 支持开源~!感谢分享

查看全部评分


本帖被以下淘专辑推荐:

签到天数: 8 天

沙发
发表于 2018-12-19 20:20:23 | 只看该作者   湖北省咸宁市
Hpsocket,写一个稳定的HTTPServer就可以了。。。。 崩溃都基本是核心不稳定造成的。。目前自己项目就是HP写的HTTPSERVER,每日请求几千万次~ 稳定的一笔。 Hp大法好~~
回复 支持 反对

使用道具 举报

结帖率:100% (8/8)

签到天数: 1 天

板凳
发表于 2018-12-19 22:10:31 | 只看该作者   湖南省长沙市
感谢阜南县!!!!!!!!!!!
回复 支持 反对

使用道具 举报

结帖率:48% (11/23)

签到天数: 4 天

地板
发表于 2018-12-20 15:13:23 | 只看该作者   山东省济南市
这个牛逼啊
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 16 天

地下
发表于 2018-12-20 15:51:53 | 只看该作者   广西壮族自治区南宁市
不错不错,在学习hp
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 14 天

6
发表于 2018-12-20 18:09:38 | 只看该作者   江西省九江市
厉害·了感谢分享
回复 支持 反对

使用道具 举报

结帖率:82% (9/11)
7
发表于 2018-12-20 18:45:39 | 只看该作者   江西省南昌市
由于今年参赛作品较多,帖子发完后可能很快就被新帖顶下去了,为了让更多易友看到优秀的源码作品,请优秀源码申请精华,申请地址 https://125.confly.eu.org/thread-13871770-1-1.html
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
8
发表于 2018-12-20 19:10:16 | 只看该作者   湖北省十堰市
正在学习啊
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
9
发表于 2018-12-20 19:39:38 | 只看该作者   北京市北京市
6666666666666666666666666666
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)

签到天数: 6 天

10
发表于 2018-12-20 23:07:00 | 只看该作者   广东省佛山市
正在学习啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表