MVC5 网站开发之六 管理员 2、添加、删除、重置密码、修改密码、列表浏览

news/2024/5/15 0:13:13/文章来源:https://blog.csdn.net/weixin_33749131/article/details/86323990

 

目录

奔跑吧,代码小哥!

MVC5网站开发之一 总体概述

MVC5 网站开发之二 创建项目

MVC5 网站开发之三 数据存储层功能实现

MVC5 网站开发之四 业务逻辑层的架构和基本功能

MVC5 网站开发之五 展示层架构

MVC5 网站开发之六 管理员 1、登录、验证和注销

MVC5 网站开发之六 管理员 2、添加、删除、重置密码、修改密码、列表浏览

MVC5 网站开发之七 用户功能 1、角色的后台管理

 

一、安装插件。

展示层前端框架以Bootstrap为主,因为Bootstrap的js功能较弱,这里添加一些插件作补充。其实很多js插件可以通过NuGet安装,只是NuGet安装时添加的内容较多,不如自己复制来的干净,所以这里所有的插件都是下载然后复制到项目中。

1、Bootstrap 3 Datepicker 4.17.37

网址:https://eonasdan.github.io/bootstrap-datetimepicker/

下载并解压压缩包->将bootstrap-datetimepicker.js和bootstrap-datetimepicker.min.js复制到Ninesy.Web项目的Scripts文件夹,将bootstrap-datetimepicker.css和bootstrap-datetimepicker.min.css复制到Content文件夹。

2、bootstrap-dialog 3.3.4.1

网址:https://github.com/nakupanda/bootstrap3-dialog

下载并解压压缩包->将.js复制到Ninesy.Web项目的Scripts文件夹,将.css复制到Content文件夹。

3、bootstrap-select  1.10.0

网址:http://silviomoreto.github.io/bootstrap-select/

下载并解压压缩包->将bootstrap-select.js复制到Ninesy.Web项目的Scripts文件夹,和defaults-zh_CN.js重命名为bootstrap-select-zh_CN.js复制到Ninesy.Web项目的Scripts文件夹,将bootstrap-select.css、bootstrap-select.css.map和bootstrap-select.min.css复制到Content文件夹。

4、bootstrap-table 1.10.1
网址:http://bootstrap-table.wenzhixin.net.cn/

下载并解压压缩包->将bootstrap-table.js和bootstrap-table-zh-CN.js复制到Ninesy.Web项目的Scripts文件夹,将bootstrap-table.css复制到Content文件夹。

5、Bootstrap TreeView 1.2.0

网址:https://github.com/jonmiles/bootstrap-treeview

下载并解压压缩包->将bootstrap-treeview.js复制到Ninesy.Web项目的Scripts文件夹,将bootstrap-treeview.css复制到Content文件夹。

 

6、twbs-pagination

网址:http://esimakin.github.io/twbs-pagination/

下载并解压压缩包->将jquery.twbsPagination.jsjquery.twbsPagination.min.js复制到Ninesy.Web项目的Scripts文件夹。

7、对js和css进行捆绑和压缩

打开Ninesky.Web->App_Start->BundleConfig.cs。添加红框内的代码。

image

 

二、获取ModelState错误信息的方法

在项目中有些内容是通过AJAX方法提交,如果提交时客户端没有进行验证,在服务器端进行验证时会将错误信息保存在ModelState中,这里需要写一个方法来获取ModelState的错误信息,以便反馈给客户端。

1、Ninesk.Web【右键】->添加->类,输入类名General。

引用命名空间using System.Web.MvcSystem.Text。

添加静态方法GetModelErrorString(),该方法用来获取模型的错误字符串。

using System.Linq;
using System.Text;
using System.Web.Mvc;namespace Ninesky.Web
{/// <summary>/// 通用类/// </summary>public class General{/// <summary>/// 获取模型错误/// </summary>/// <param name="modelState">模型状态</param>/// <returns></returns>public static string GetModelErrorString(ModelStateDictionary modelState){StringBuilder _sb = new StringBuilder();var _ErrorModelState = modelState.Where(m => m.Value.Errors.Count() > 0);foreach(var item in _ErrorModelState){foreach (var modelError in item.Value.Errors){_sb.AppendLine(modelError.ErrorMessage);}}return _sb.ToString();}}
}

 

三、完善布局页

上次完成了管理员登录,这次要进行登录后的一些功能,要先把后台的布局页充实起来。

打开 Ninesky.Web/Areas/Control/Views/_Layout.cshtml。整成下面的代码。自己渣一样的美工,具体过程就不写了。

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>@ViewBag.Title - 系统管理</title>@Styles.Render("~/Content//controlcss")@RenderSection("style", required: false)@Scripts.Render("~/bundles/modernizr")@Scripts.Render("~/bundles/jquery")@Scripts.Render("~/bundles/bootstrap")@RenderSection("scripts", required: false)
</head>
<body><div class="navbar navbar-default navbar-fixed-top"><div class="container"><div class="navbar-header"><button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button>@Html.ActionLink("NINESKY 系统管理", "Index", "Home", new { area = "Control" }, new { @class = "navbar-brand" })</div><div class="navbar-collapse collapse"><ul class="nav navbar-nav"><li><a><span class="glyphicon glyphicon-user"></span> 用户管理</a></li><li><a href="@Url.Action("Index","Admin")"><span class='glyphicon glyphicon-lock'></span> 管理员</a></li><li><a><span class="glyphicon glyphicon-list"></span> 栏目设置</a></li><li><a><span class="glyphicon glyphicon-cog"></span> 网站设置</a></li></ul><ul class="nav navbar-nav navbar-right"><li><a  href="@Url.Action("MyInfo","Admin")"><span class="glyphicon glyphicon-envelope"></span> @Context.Session["Accounts"].ToString()</a></li><li><a href="@Url.Action("Logout","Admin")"><span class="glyphicon glyphicon-log-out"></span> 退出</a></li></ul></div></div></div><div class="container body-content"><div class="row"><div class="col-lg-3 col-md-3 col-sm-4">@RenderSection("SideNav", false)</div><div class="col-lg-9 col-md-9 col-sm-8">@RenderBody()</div></div><hr /><footer class="navbar navbar-fixed-bottom text-center bg-primary "><p>&copy; Ninesky v0.1 BASE BY 洞庭夕照 http://mzwhj.cnblogs.com</p></footer></div>
</body>
</html>

image

反正效果就是这个样子了。

三、功能实现

按照设想,要在Index界面完成管理员的浏览、添加和删除功能。这些功能采用ajax方式。

在添加AdminController的时候自动添加了Index()方法。

添加Index视图

在Index方法上右键添加视图

image

@{ViewBag.Title = "管理员";
}<ol class="breadcrumb"><li><span class="glyphicon glyphicon-home"></span>  @Html.ActionLink("首页", "Index", "Home")</li><li class="active">@Html.ActionLink("管理员", "Index", "Admin")</li>
</ol>@section style{@Styles.Render("~/Content/bootstrapplugincss")
}@section scripts{@Scripts.Render("~/bundles/jqueryval")@Scripts.Render("~/bundles/bootstrapplugin")}

添加侧栏导航视图

Ninesky.Web/Areas/Control/Views/Admin【右键】->添加->视图

image

视图代码如下

<div class="panel panel-default"><div class="panel-heading"><div class="panel-title"><span class="glyphicon glyphicon-lock"></span> 管理员</div></div><div class="panel-body"><div class="list-group"><div class="list-group-item"><span class="glyphicon glyphicon-list"></span>  @Html.ActionLink("管理","Index")</div></div></div>
</div>

在Index视图中添加@section SideNav{@Html.Partial("SideNavPartialView")}(如图)

image

1、管理员列表

在Admin控制器中添加ListJson()方法

/// <summary>/// 管理员列表/// </summary>/// <returns></returns>public JsonResult ListJson(){return Json(adminManager.FindList());}

为在index中使用bootstrap-table显示和操作管理员列表,在index视图中添加下图代码。

<div id="toolbar" class="btn-group" role="group"><button id="btn_add" class="btn btn-default"><span class="glyphicon glyphicon-plus"></span> 添加</button><button id="btn_del" class="btn btn-default"><span class="glyphicon glyphicon-remove"></span> 删除</button>
</div>
<table id="admingrid"></table>

在@section scripts{ } 中添加js代码

<script type="text/javascript">$(document).ready(function () {//表格var $table = $('#admingrid');$table.bootstrapTable({toolbar: "#toolbar",showRefresh: true,showColumns: true,showFooter: true,method: "post",url: "@Url.Action("ListJson")",columns: [{ title: "state", checkbox: true },{ title: "ID", field: "AdministratorID" },{ title: "帐号", field: "Accounts" },{ title: "登录时间", field: "LoginTime", formatter: function (value) { return moment(value).format("YYYY-MM-DD HH:mm:ss") } },{ title: "登录IP", field: "LoginIP" },{ title: "创建时间", field: "CreateTime", formatter: function (value) { return moment(value).format("YYYY-MM-DD HH:mm:ss") } },{ title: "操作", field: "AdministratorID", formatter: function (value, row, index) { return "<a href=\"javascript:void(0)\" οnclick=\"ResetPassword(" + value + ",'" + row.Accounts + "')\">重置密码</a>" } }]});//表格结束
        });</script>
}

显示效果如图:

image

2、添加管理员

在控制器中添加AddPartialView()方法

/// <summary>/// 添加【分部视图】/// </summary>/// <returns></returns>public PartialViewResult AddPartialView(){return PartialView();}

Models文件夹【右键】->添加->类,输入类名 AddAdminViewModel。

using System.ComponentModel.DataAnnotations;namespace Ninesky.Web.Areas.Control.Models
{/// <summary>/// 添加管理员模型/// </summary>public class AddAdminViewModel{/// <summary>/// 帐号/// </summary>[Required(ErrorMessage = "必须输入{0}")][StringLength(30, MinimumLength = 4, ErrorMessage = "{0}长度为{2}-{1}个字符")][Display(Name = "帐号")]public string Accounts { get; set; }/// <summary>/// 密码/// </summary>[DataType(DataType.Password)]        
        [Required(ErrorMessage = "必须输入{0}")][StringLength(20,MinimumLength =6, ErrorMessage = "{0}长度少于{1}个字符")][Display(Name = "密码")]public string Password { get; set; }}
}

右键添加视图

image

注意:抓图的时候忘记勾上引用脚本库了就抓了,记得勾上。

@model Ninesky.Web.Areas.Control.Models.AddAdminViewModel@using (Html.BeginForm()) 
{@Html.AntiForgeryToken()<div class="form-horizontal">@Html.ValidationSummary(true, "", new { @class = "text-danger" })<div class="form-group">@Html.LabelFor(model => model.Accounts, htmlAttributes: new { @class = "control-label col-md-2" })<div class="col-md-10">@Html.EditorFor(model => model.Accounts, new { htmlAttributes = new { @class = "form-control" } })@Html.ValidationMessageFor(model => model.Accounts, "", new { @class = "text-danger" })</div></div><div class="form-group">@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })<div class="col-md-10">@Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } })@Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })</div></div></div>
}
@Scripts.Render("~/bundles/jqueryval")

在Index视图 script脚本区域,“//表格结束”后面添加js代码

//表格结束//工具栏//添加按钮$("#btn_add").click(function () {var addDialog = new BootstrapDialog({title: "<span class='glyphicon glyphicon-plus'></span>添加管理员",message: function (dialog) {var $message = $('<div></div>');var pageToLoad = dialog.getData('pageToLoad');$message.load(pageToLoad);return $message;},data: {'pageToLoad': '@Url.Action("AddPartialView")'},buttons: [{icon: "glyphicon glyphicon-plus",label: "添加",action: function (dialogItself) {$.post($("form").attr("action"), $("form").serializeArray(), function (data) {if (data.Code == 1) {BootstrapDialog.show({message: data.Message,buttons: [{icon: "glyphicon glyphicon-ok",label: "确定",action: function (dialogItself) {$table.bootstrapTable("refresh");dialogItself.close();addDialog.close();}}]});}else BootstrapDialog.alert(data.Message);}, "json");$("form").validate();}}, {icon: "glyphicon glyphicon-remove",label: "关闭",action: function (dialogItself) {dialogItself.close();}}]});addDialog.open();});//添加按钮结束

image

3、删除管理员

考虑到批量删除,上次写AdministratorManager没有写批量删除方法,这次补上。

打开Ninesky.Core/AdministratorManager.cs, 添加如下代码

/// <summary>/// 删除【批量】返回值Code:1-成功,2-部分删除,0-失败/// </summary>/// <param name="administratorIDList"></param>/// <returns></returns>public Response Delete(List<int> administratorIDList){Response _resp = new Response();int _totalDel = administratorIDList.Count;int _totalAdmin = Count();foreach (int i in administratorIDList){if (_totalAdmin > 1){base.Repository.Delete(new Administrator() { AdministratorID = i }, false);_totalAdmin--;}else _resp.Message = "最少需保留1名管理员";}_resp.Data = base.Repository.Save();if(_resp.Data == _totalDel){_resp.Code = 1;_resp.Message = "成功删除" + _resp.Data + "名管理员";}else if (_resp.Data > 0){_resp.Code = 2;_resp.Message = "成功删除" + _resp.Data + "名管理员";}else{_resp.Code = 0;_resp.Message = "删除失败";}return _resp;}

另外要修改一下Ninesky.DataLibrary.Repository的删除public int Delete(T entity, bool isSave)代码将Remove方式 改为Attach,不然会出错。

/// <summary>/// 删除实体/// </summary>/// <param name="entity">实体</param>/// <param name="isSave">是否立即保存</param>/// <returns>在“isSave”为True时返回受影响的对象的数目,为False时直接返回0</returns>public int Delete(T entity, bool isSave){DbContext.Set<T>().Attach(entity);DbContext.Entry<T>(entity).State = EntityState.Deleted;return isSave ? DbContext.SaveChanges() : 0;}

打开AdminController 添加DeleteJson(List<int> ids)方法

/// <summary>/// 删除 /// Response.Code:1-成功,2-部分删除,0-失败/// Response.Data:删除的数量/// </summary>/// <returns></returns>
        [HttpPost]public JsonResult DeleteJson(List<int> ids){int _total = ids.Count();Response _res = new Core.Types.Response();int _currentAdminID = int.Parse(Session["AdminID"].ToString());if (ids.Contains(_currentAdminID)){ids.Remove(_currentAdminID);}_res = adminManager.Delete(ids);if(_res.Code==1&& _res.Data < _total){_res.Code = 2;_res.Message = "共提交删除"+_total+"名管理员,实际删除"+_res.Data+"名管理员。\n原因:不能删除当前登录的账号";}else if(_res.Code ==2){_res.Message = "共提交删除" + _total + "名管理员,实际删除" + _res.Data + "名管理员。";}return Json(_res);}

在Index视图 script脚本区域,“//添加按钮结束”后面添加删除js代码

//添加按钮结束//删除按钮$("#btn_del").click(function () {var selected = $table.bootstrapTable('getSelections');if ($(selected).length > 0) {BootstrapDialog.confirm("确定删除选中的" + $(selected).length + "位管理员", function (result) {if (result) {var ids = new Array($(selected).length);$.each(selected, function (index, value) {ids[index] = value.AdministratorID;});$.post("@Url.Action("DeleteJson","Admin")", { ids: ids }, function (data) {if (data.Code != 0) {BootstrapDialog.show({message: data.Message,buttons: [{icon: "glyphicon glyphicon-ok",label: "确定",action: function (dialogItself) {$table.bootstrapTable("refresh");dialogItself.close();}}]});}else BootstrapDialog.alert(data.Message);}, "json");}});}else BootstrapDialog.warning("请选择要删除的行");});//删除按钮结束

4、重置密码

在AdminController中 添加ResetPassword(int id)方法。方法中将密码重置为Ninesky。

/// <summary>/// 重置密码【Ninesky】/// </summary>/// <param name="id">管理员ID</param>/// <returns></returns>
        [HttpPost]public JsonResult ResetPassword(int id){string _password = "Ninesky";Response _resp = adminManager.ChangePassword(id, Security.SHA256(_password));if (_resp.Code == 1) _resp.Message = "密码重置为:" + _password;return Json(_resp);}

在添加script代码中表格代码段可以看到,这里通过 连接的onclick调用ResetPassword方法,所以ResetPassword方法要放在表格生成前面,不然会出现 方法未定义的错误。

image

这里把代码放到$(document).ready的前面。

<script type="text/javascript">        //重置密码function ResetPassword(id, accounts) {BootstrapDialog.confirm("确定重置" + accounts + "的密码", function (result) {if (result) {$.post("@Url.Action("ResetPassword", "Admin")", { id: id }, function (data) {BootstrapDialog.alert(data.Message);}, "json");}});};//重置密码结束
$(document).ready(function () {//表格

5、修改管理员密码

在在AdminController中 添加MyInfo()方法。

/// <summary>/// 我的资料/// </summary>/// <returns></returns>
        public ActionResult MyInfo(){return View(adminManager.Find(Session["Accounts"].ToString()));}

右键添加视图

image

@model Ninesky.Core.Administrator@{ViewBag.Title = "我的资料";
}@section SideNav{@Html.Partial("SideNavPartialView")}<ol class="breadcrumb"><li><span class="glyphicon glyphicon-home"></span>  @Html.ActionLink("首页", "Index", "Home")</li><li>@Html.ActionLink("管理员", "Index", "Admin")</li><li class="active">我的资料</li>
</ol>
@Html.Raw(ViewBag.Message)
@using (Html.BeginForm())
{@Html.AntiForgeryToken()<div class="form-horizontal">@Html.ValidationSummary(true, "", new { @class = "text-danger" })<div class="form-group">@Html.LabelFor(model => model.Accounts, htmlAttributes: new { @class = "control-label col-md-2" })<div class="col-md-10">@Html.DisplayTextFor(model => model.Accounts)</div></div><div class="form-group">@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })<div class="col-md-10">@Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } })@Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })</div></div><div class="form-group">@Html.LabelFor(model => model.LoginIP, htmlAttributes: new { @class = "control-label col-md-2" })<div class="col-md-10">@Html.DisplayTextFor(model => model.LoginIP)</div></div><div class="form-group">@Html.LabelFor(model => model.LoginTime, htmlAttributes: new { @class = "control-label col-md-2" })<div class="col-md-10">@Html.DisplayTextFor(model => model.LoginTime)</div></div><div class="form-group">@Html.LabelFor(model => model.CreateTime, htmlAttributes: new { @class = "control-label col-md-2" })<div class="col-md-10">@Html.DisplayTextFor(model => model.CreateTime)</div></div><div class="form-group"><div class="col-md-offset-2 col-md-10"><input type="submit" value="保存" class="btn btn-default" /></div></div></div>
}@section Scripts {@Scripts.Render("~/bundles/jqueryval")
}

在在AdminController中 添加处理方法MyInfo(FormCollection form)方法。

[ValidateAntiForgeryToken][HttpPost]public ActionResult MyInfo(FormCollection form){var _admin = adminManager.Find(Session["Accounts"].ToString());if (_admin.Password != form["Password"]){_admin.Password = Security.SHA256(form["Password"]);var _resp = adminManager.ChangePassword(_admin.AdministratorID, _admin.Password);if(_resp.Code ==1) ViewBag.Message = "<div class=\"alert alert-success\" role=\"alert\"><span class=\"glyphicon glyphicon-ok\"></span>修改密码成功!</div>";else ViewBag.Message = "<div class=\"alert alert-danger\" role=\"alert\"><span class=\"glyphicon glyphicon-remove\"></span>修改密码失败!</div>";}return View(_admin);}

==========================================================

管理员功能到此写完。感慨一下:时间太少,熬夜到凌晨真不容易!

代码见:https://ninesky.codeplex.com/SourceControl/latest

代码下载:https://ninesky.codeplex.com 点击SOURCE CODE 点击Download下载源文件。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站注册图形验证码

后台代码&#xff1a;package cn.itcast.shop.user.action;import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.p_w_picpath.BufferedImage; import java.util.Random;import javax.p_w_picpathio.ImageIO;…

深夜分享建站过程---我的启示录

2019独角兽企业重金招聘Python工程师标准>>> 每个人都有做网站的冲动&#xff0c;都想当管理员&#xff0c;拥有更高级的权限&#xff0c;但往往是在私下里与好友或在网上热火朝天、激情澎湃地讨论一番而很少付诸行动。梦想高远固然重要&#xff0c;但脚踏实地的筹划…

嵌入式学习网站

2019独角兽企业重金招聘Python工程师标准>>> 1. 微软嵌入专业技术社区 http://www.winbile.net/cms/ 2. Pocket PC Developer Network http://www.pocketpcdn.com/sections/evc.html 3. 嵌入式研发之家 http://www.itxxh.cn/ 4. Windows Mobile 应用开发 http:/…

python 登陆网站图片验证,用python登录带弱图片验证码的网站

上一篇介绍了使用python模拟登陆网站&#xff0c;但是登陆的网站都是直接输入账号及密码进行登陆&#xff0c;现在很多网站为了加强用户安全性和提高反爬虫机制都会有包括字符、图片、手机验证等等各式各样的验证码。图片验证码就是其中一种&#xff0c;而且识别难度越来越大&a…

linux服务器打包文件,linux系统怎么进行文件打包_网站服务器运行维护,linux,文件...

linux系统怎么打开终端_网站服务器运行维护linux系统打开终端的方法是&#xff1a;1、使用快捷键【ctrlaltt】打开终端&#xff0c;linux支持多终端&#xff0c;可以一次性打开多个终端&#xff1b;2、通过【search your computer】功能搜索terminal。打包(.tar):tar -cvf Pro.…

网站架构文章和MySQL在国际知名网站中的使用量

2008年4月18日&#xff0c;在Alexa安排的一次“Scaling MySQL -- Up or Out?” 的小组辩论中&#xff0c;MySQL、Sun、Flickr、Fotolog、Wkipedia、Facebook、YouTube等国际知名网站的DBA们&#xff0c;对其 网站MySQL数据库服务器、Web服务器、缓存服务器的数量&#xff0c;M…

html gif素材在哪儿找,不会GIF动图制作?不知道从哪里找动图素材?送你2个网站1个软件...

原标题&#xff1a;不会GIF动图制作&#xff1f;不知道从哪里找动图素材&#xff1f;送你2个网站1个软件现在我们再创作内容时&#xff0c;都喜欢加上gif动图&#xff0c;特别是搞笑领域用的更多&#xff0c;这样看上去互让整篇文章都有画面感&#xff0c;而我们想要制作动图应…

一个服务器可以装几个网站,ecs云服务器可以装几个网站

ecs云服务器可以装几个网站 内容精选换一换拥有多个网卡的弹性云服务器&#xff0c;如果每个网卡对应的子网中的DNS服务器地址配置不一致时&#xff0c;通过该弹性云服务器将无法访问公网网站或云中的内部域名。请确保虚拟私有云的多个子网中的DNS服务器地址配置一致。您可以通…

Html CSS Javascript实现星巴克网站的Demo-传统网页布局(一)

Html&#xff0c;Css&#xff0c;JavaScript实现星巴克网站的Demo-传统网页布局&#xff08;一&#xff09; 本文实现了星巴克网站的传统布局方法。 图片素材放在百度网盘 链接&#xff1a;https://pan.baidu.com/s/1kzjzY3NNlOEH1qWMgVEzZw 提取码&#xff1a;lpq1 现提供完整…

Html,Css,JavaScript实现星巴克网站的Demo-响应式布局(二)

响应式布局 响应式布局可以为不同终端的用户提供更加舒适的界面和更好的用户体验&#xff0c;而且随着大屏幕移动设备的普及&#xff0c;用“大势所趋”来形容也不为过。随着越来越多的设计师采用这个技术&#xff0c;我们不仅看到很多的创新&#xff0c;还看到了一些成形的模式…

网站建设公司浅谈比较好网站页面设计的需要哪些合理性?

怎样做出一个好的网站&#xff0c;让你做出网站很容易传递给客户正确的信息表达。通常建站的专业人员都清楚用户体验的重要性&#xff0c;所以大家在制作页面过程中下工夫。那么&#xff0c;如何布局合理的网站设计才能得到用户欣赏呢&#xff1f;根据搜客大伟在网站建设公司多…

大型网站架构演变和知识体系

之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详细的讲为什么需要做这样的演变&#xff0c;再加上近来感觉有不少同学都很难明白为什么…

几个主流网站系统的引用结构图

引用结构图描述了一个系统中各个部分的关联性&#xff1a;哪个文件与那个文件相关联、哪个系统是另一个系统的子系统。 在研究一个系统之前&#xff0c;最好先把它的引用结构图画出来&#xff0c;这将非常有用。Federico Cargnelutti为我们带来了几个主流网站系统的引用结构图…

百度推广:如何正确理解“网站权重”?

我们知道影响网站排名的因素有很多&#xff0c;网站权重经常被用于SEO工作最重要的参考指标&#xff0c;而在实际运营中&#xff0c;它并不是与企业产品转化&#xff0c;完全成正向比例。那么&#xff0c;SEO人员该如何理解网站权重&#xff1f;在回答这个问题之前&#xff0c;…

小云APP移动建站初体验

这段时间一直在研究想给自己的站做一个真正意义上的移动站&#xff0c;APP也好、自适应也罢&#xff0c;也是伤透了脑筋。为何要做移动站?说简单一点&#xff0c;就是身边的朋友已证实&#xff0c;移动端的流量太大了&#xff0c;真是非常大。随便做一个H5页面带来的流量都要比…

介绍MyBatis代码生成网站(三) --- [ Mapper接口类 ] 实际生成效果

为什么80%的码农都做不了架构师&#xff1f;>>> 实际生成的Mapper接口类 package com.icsm.paybank.mapper;import java.util.List; import java.util.Map; import com.icsm.paybank.entity.TabDemo;/*** 实体名称 演示主表* 数据库表 TAB_DEMO* 开发日期 2016-09-…

阿里云服务器(云主机)搭建网站攻略 最新9.5一个月

想了解更多&#xff0c;可前往最新个人博客&#xff1a;Amaya丶夜雨博客 或访问主页&#xff1a;https://www.amayaliu.cn 继2017版本 阿里云服务器&#xff08;云主机&#xff09;搭建网站攻略 - 云翼计划 - 博客园 后的服务器攻略&#xff0c;这篇攻略主要针对阿里云出售的…

大型网站架构演变和知识体系

之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详细的讲为什么需要做这样的演变&#xff0c;再加上近来感觉有不少同学都很难明白为什么…

分享两个获取指定网站服务器、环境详情的网站

两个可以找出特定网站正在使用的技术的网站&#xff0c;相当的6 1、https://w3techs.com/sites 优点&#xff1a;页面简单&#xff0c;搜出来的东西比较全面&#xff0c; 缺点&#xff1a;有些小网站&#xff0c;没有被爬取&#xff0c;而且是英文的&#xff0c;虽然也不需要看…

浅谈Windows系统下的网站备份与恢复

之前写了利用命令行工具创建LinuxMac系统下网站备份的文章&#xff0c;但是windows系统无法采用命令行工具进行网站备份&#xff0c;这个时候我们就需要借助第三方工具了。欲知详情&#xff0c;且看下文介绍。 目前仍有很多网站运营商没有做好备份工作&#xff0c;一旦网站突然…