当前位置: 首页 > news >正文

贵州省安顺市网站建设wordpress 主题单页

贵州省安顺市网站建设,wordpress 主题单页,做简单网站需要学什么软件有哪些,网站建设项目如何敏捷【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 【JSON2WEB】06 JSON2WEB前端框架搭建 【J…【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 【JSON2WEB】06 JSON2WEB前端框架搭建 【JSON2WEB】07 Amis可视化设计器CRUD增删改查 【JSON2WEB】08 Amis的事件和校验 【JSON2WEB】09 Amis-editor的代码移植到json2web 基于 Amis 做个登录页面 login.html 用于验证用户名和密码的验证成功后返回token,并保存token在 localStorage中。 参考视频教程https://www.bilibili.com/video/BV1wu411Q7y3/?spm_id_from333.788 Amis官方也没有视频教程没有一点基础学起来很费劲啊。 1 创建登录页面 Login.html 1 新建登录页面 从官方文档 https://aisuda.bce.baidu.com/amis/zh-CN/docs/start/getting-started 拷贝hello.html,并修改后代码如下 !DOCTYPE html html langzhheadmeta charsetUTF-8 /titleamis demo/titlemeta http-equivContent-Type contenttext/html; charsetutf-8 /meta nameviewport contentwidthdevice-width, initial-scale1, maximum-scale1 /meta http-equivX-UA-Compatible contentIEEdge /link relstylesheet href/sdk/sdk.css /link relstylesheet href/sdk/helper.css /link relstylesheet href/sdk/iconfont.css /!-- 这是默认主题所需的如果是其他主题则不需要 --!-- 从 1.1.0 开始 sdk.css 将不支持 IE 11如果要支持 IE11 请引用这个 css并把前面那个删了 --!-- link relstylesheet hrefsdk-ie11.css / --!-- 不过 amis 开发团队几乎没测试过 IE 11 下的效果所以可能有细节功能用不了如果发现请报 issue --stylehtml,body,.app-wrapper {position: relative;width: 100%;height: 100%;margin: 0;padding: 0;}/style /headbodydiv idroot classapp-wrapper/divscript src/sdk/sdk.js/scriptscript typetext/javascript(function () {let amis amisRequire(amis/embed);// 通过替换下面这个配置来生成不同页面let amisJSON {type: page,title: 登录JSON2WEB,body: {type: form,title: ,mode: horizontal,api: {url: http://127.0.0.1:5217/token/generate-token?userid$userIdpasswd$passWd,method: post,adaptor: function (payload) {console.log(payload);if (payload.status 0) {localStorage.setItem(token, payload.data.token);// localStorage.clear(); location.href /login.html;return payload;}}},redirect: /index.html,body: [{label: 用户名,type: input-text,name: userId},{label: 密码,type: input-password,name: passWd}]}};let amisScoped amis.embed(#root, amisJSON);})();/script /body/html1.2 核心就是 API的配置 1.3 页面预览 2 主页 index.html的代码 2.1 所有的API请求都带上token token放在请求头里的Authorization请求适配器代码如下 requestAdaptor(api) {// Api前缀// if (api.url.indexOf(pages) -1){// api.url http://127.0.0.1:5217 api.url;// }//api.url http://127.0.0.1:5217 api.url;// token 认证 // api.headers[Authorization] Bearer localStorage.getItem(token);api.headers[Authorization] localStorage.getItem(token);console.log(全局请求适配器, api);return api;},2.2 所有的响应适配器 也就是没有token或过期等都请求不到后台的数据代码如下 // 全局 api 适配器。// 另外在 amis 配置项中的 api 也可以配置适配器针对某个特定接口单独处理。responseAdaptor(payload, response) {console.log(全局响应适配器, response);if (response.state 401) {localStorage.clear();location.href /;}return payload, response;},2.3 退出代码 退出时清空token并跳转到登录页用内嵌js代码实现如下 header: {type: tpl,inline: false,className: w-full,tpl: div classflex justify-betweendiv顶部区域左侧/divdiva href# οnclicklocalStorage.clear(); location.href /;退出/a/div/div},2.4 首页全部代码 !DOCTYPE html htmlheadmeta charsetUTF-8 /titleamis admin/titlemeta http-equivContent-Type contenttext/html; charsetutf-8 /meta nameviewport contentwidthdevice-width, initial-scale1, maximum-scale1 /meta http-equivX-UA-Compatible contentIEEdge /!-- link relstylesheet titledefault hrefhttps://cdn.jsdelivr.net/npm/amisbeta/sdk/sdk.css /link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/amisbeta/sdk/helper.css /script srchttps://cdn.jsdelivr.net/npm/amisbeta/sdk/sdk.js/script --link relstylesheet titledefault href/sdk/sdk.css /link relstylesheet titledefault href/sdk/antd.css /!-- link relstylesheet titledefault href/sdk/cxd.css / --link relstylesheet href/sdk/helper.css /script src/sdk/sdk.js/script!-- script srchttps://cdn.jsdelivr.net/npm/vue2/script --!-- script srchttps://cdn.jsdelivr.net/npm/history/umd/history.js/script --script src/sdk/history.js/scriptstylehtml,body,.app-wrapper {position: relative;width: 100%;height: 100%;margin: 0;padding: 0;}/style /headbodydiv idroot classapp-wrapper/divscript(function () {let amis amisRequire(amis/embed);const match amisRequire(path-to-regexp).match;// 如果想用 browserHistory 请切换下这处代码, 其他不用变//const history History.createBrowserHistory();const history History.createHashHistory();const app {type: app,brandName: JSON2WEB,//logo: /public/logo.png,logo: /public/5217.jpg,header: {type: tpl,inline: false,className: w-full,tpl: div classflex justify-betweendiv顶部区域左侧/divdiva href# οnclicklocalStorage.clear(); location.href /;退出/a/div/div},// 如果想用 browserHistory 请切换下这处代码, 他不用变退出登录/a/div/divfooter: div classp-2 text-center bg-light版权没有翻版不究底部区域/div,asideBefore: div classp-2 text-center菜单前面区域/div,asideAfter: div classp-2 text-center菜单后面区域/div,api: /pages/site.json};function normalizeLink(to, location history.location) {to to || ;if (to to[0] #) {to location.pathname location.search to;} else if (to to[0] ?) {to location.pathname to;}const idx to.indexOf(?);const idx2 to.indexOf(#);let pathname ~idx? to.substring(0, idx): ~idx2? to.substring(0, idx2): to;let search ~idx ? to.substring(idx, ~idx2 ? idx2 : undefined) : ;let hash ~idx2 ? to.substring(idx2) : location.hash;if (!pathname) {pathname location.pathname;} else if (pathname[0] ! / !/^https?\:\/\//.test(pathname)) {let relativeBase location.pathname;const paths relativeBase.split(/);paths.pop();let m;while ((m /^\.\.?\//.exec(pathname))) {if (m[0] ../) {paths.pop();}pathname pathname.substring(m[0].length);}pathname paths.concat(pathname).join(/);}return pathname search hash;}function isCurrentUrl(to, ctx) {if (!to) {return false;}const pathname history.location.pathname;const link normalizeLink(to, {...location,pathname,hash: });if (!~link.indexOf(http) ~link.indexOf(:)) {let strict ctx ctx.strict;return match(link, {decode: decodeURIComponent,strict: typeof strict ! undefined ? strict : true})(pathname);}return decodeURI(pathname) link;}let amisInstance amis.embed(#root,app,{location: history.location},{// watchRouteChange: fn {// return history.listen(fn);// },requestAdaptor(api) {// Api前缀// if (api.url.indexOf(pages) -1){// api.url http://127.0.0.1:5217 api.url;// }//api.url http://127.0.0.1:5217 api.url;// token 认证 // api.headers[Authorization] Bearer localStorage.getItem(token);api.headers[Authorization] localStorage.getItem(token);console.log(全局请求适配器, api);return api;},// 全局 api 适配器。// 另外在 amis 配置项中的 api 也可以配置适配器针对某个特定接口单独处理。responseAdaptor(payload, response) {console.log(全局响应适配器, response);if (response.state 401) {localStorage.clear();location.href /;}return payload, response;},updateLocation: (location, replace) {location normalizeLink(location);if (location goBack) {return history.goBack();} else if ((!/^https?\:\/\//.test(location) location history.location.pathname history.location.search) ||location history.location.href) {// 目标地址和当前地址一样不处理免得重复刷新return;} else if (/^https?\:\/\//.test(location) || !history) {return (window.location.href location);}history[replace ? replace : push](location);},jumpTo: (to, action) {if (to goBack) {return history.goBack();}to normalizeLink(to);if (isCurrentUrl(to)) {return;}if (action action.actionType url) {action.blank false? (window.location.href to): window.open(to, _blank);return;} else if (action action.blank) {window.open(to, _blank);return;}if (/^https?:\/\//.test(to)) {window.location.href to;} else if ((!/^https?\:\/\//.test(to) to history.pathname history.location.search) ||to history.location.href) {// do nothing} else {history.push(to);}},isCurrentUrl: isCurrentUrl,// theme: cxdtheme: cxd});history.listen(state {amisInstance.updateProps({location: state.location || state});});})();/script /body/html3 后端REST2SQL修改 3.1 所有REST请求都要验证token token从请求头Authorization获取。 switch req[RESTorSQL] {case REST:// token有效性验证tokenString : req[Authorization].(string)if vToken(w, tokenString) ! 200 {return}token验证函数 // token 验证函数 func vToken(w http.ResponseWriter, tokenString string) int {tokenmap : make(map[string]interface{})tokenmap token.ValidateTokenHandler(w, tokenString)if tokenmap[status] ! http.StatusOK {// 抛出错误信息httpResWriter(w,tokenmap)return 401}return 200 }主要内容就是抛出token错误信息并设置返回代码为 401 4 nodejs路由配置 // 定义路由以加载不同的页面 app.get(/, (req, res) {res.sendFile(path.resolve(__dirname, login.html)); });app.get(/index.html, function (req, res) {res.sendFile(path.join(__dirname, index.html)); }); http://localhost:3000/ 请求的就是登录页面 login.html http://localhost:3000/index.html请求的是 index.html 5 实操演练 Step1 登录 http://localhost:3000/ Step 2 提交跳转 点【提交】按钮登录成功跳转到主页index.html,可以查看token Step 3 用户管理 可查询到信息并可以crud操作。 Setp 4 退出 点主页右上角的【退出】按钮可退出主页并跳转到登录页并清除了token Step 5 直接在访问index.html 页面可以打开请求不到api的数据。 没有token或token过期都请求不到数据 脑子不好用搞一点都记录一下方便自己查询好记性不如烂笔头。 本文完。
http://www.w-s-a.com/news/694554/

相关文章:

  • 江门高端网站建设怎样制作wordpress手机主题
  • 淘宝网站如何在邮件里做超链接wordpress图片投票插件
  • 镇平哪家网站做的好招聘网站如何建设
  • 建网站一般多少钱幸福里wordpress怎么可视化构建页面
  • 广东网站建设建站模板主机托管公司
  • 网站开发师是做什么的网站域名在哪里备案
  • 什么是网站国内高速空间国外做3d模型的网站
  • 效果建网站的公凡科网登陆
  • 网站域名续费多少钱在线制作图片软件
  • 济南城乡住房建设厅网站中国会议营销网站
  • 展示类网站cms网站seo方法
  • 莒县做网站的公司设计师网站模版
  • 顺德顺的网站建设备份的网站建设方案书
  • 如何做网站广告山东电商网站建设
  • 新手建什么网站赚钱吗WordPress搜狗不收录
  • 石家庄招聘哪个网站做的好网站设计建设公司服务商
  • 建设公司网站大概需要多少钱建站平台和网站开发的区别
  • 淄川区住房和城乡建设局网站门户网站模板源码下载
  • 室内设计公司 网站建设建站塔山双喜
  • 网站建设属于什么经营范围销售网站开发业务
  • 企业建站系统平台优秀网站作品截图
  • 杭州品牌网站制作wordpress多域名移动主题
  • 北京网站网站建设icp备案 网站备案
  • 长春网站公司哪家好电子商务网站建设作文
  • 网站开发php程序员网上店铺怎么运营
  • mip网站怎么做匹配h5婚纱摄影网站模板
  • 怎么注册建设公司网站域名历史价格查询
  • 爱站网seo工具包互联网软件开发工程师
  • 百度站长工具平台登录郑州seo规则
  • 财税公司做网站精品建站教程