django搭建一个小型的服务器运维网站-最简单的实践之修改服务器时间

news/2024/4/27 19:21:07/文章来源:https://blog.csdn.net/weixin_34342992/article/details/88818343

目录

  1. 项目介绍和源码;
  2. 拿来即用的bootstrap模板;
  3. 服务器SSH服务配置与python中paramiko的使用;
  4. 用户登陆与session;
  5. 最简单的实践之修改服务器时间;
  6. 查看和修改服务器配置与数据库的路由;
  7. 基于websocket的实时日志实现;
  8. 查看服务器中的日志与前端的datatable的利用;
  9. 重启服务器进程。

前言

  本篇文章会说下如何在网站上交互修改服务器的时间。其实质是通过网站调用文章服务器SSH服务配置与python中paramiko的使用中介绍的paramiko写的接口去和Linux服务器交互(图1中的函数)。网页分为获取时间,修改时间和记录修改时间三个简单功能,大体的结构如图1所示,页面效果如图2所示。也有些小细节的完善,如laydate插件的使用和通过数据库后台记录正在进行的任务等。

图1 时间相关功能

图2 页面效果

功能实现

  关于模板简化的方法在拿来即用的bootstrap模板文章中已经实现了,文章中说到,网页独有的内容放在{% block mainbody %}中,现在我们考虑在空空如也的模板中添加一些功能。在写之前,我们把文章中提到的各种paramiko封装的接口放在functions.py这个文件里面,并把它塞到WebTool/WebTool下面,如图3,以便解耦。

图3 funtions位置

  下面是一堆html代码,这段代码实现了图2所示的前端内容(其中的{{}}中内容是由下文中提到的渲染函数servertime传递上来的)。然后说下实现。

{% extends "./base.html" %}{% block othercss %}{% endblock %}
{% block title %}{{ title }}{% endblock %}
{% block log %}{{ title }}{% endblock %}
{% block username %}{{ username }}{% endblock %}{% block mainbody %}
<section class="wrapper site-min-height"><h3><i class="fa fa-angle-right"></i> 服务器时间 <i class="fa fa-calendar"></i></h3><div class="row mt"><div class="col-lg-6"><div class="form-panel"><h4 class="mb"> 服务器时间</h4><div class="col-sm-12"><h4 class="mb" id="getservertime" style="text-align: center"> {{time}}</h4></div><div><br><br><br></div><div class="col-sm-12" style="text-align: right"><button id="gettime" class="btn btn-theme02">重新获取</button></div><div><br><br><br></div></div></div><div class="col-lg-6"><div class="form-panel"><h4 class="mb"> 修改服务器时间</h4><div class="col-sm-12"><div class="task-content"><ul id="sortable" class="task-list ui-sortable">{% if serverstatus == 'others' %}<li class="list-danger"><i class=" fa fa-ellipsis-v"></i><span class="task-title-sp">【{{taskor}}】在使用服务器,无法修改时间</span></li>{% elif serverstatus == 'nobady' %}<li class="list-success"><i class=" fa fa-ellipsis-v"></i><input type="checkbox" class="list-child" onchange="isCheck(this)" value=""><span class="task-title-sp" id="use">&nbsp;&nbsp;我在使用中,请勿修改时间</span></li>{% else %}<li class="list-success"><i class=" fa fa-ellipsis-v"></i><input type="checkbox" class="list-child" checked="checked" onchange="isCheck(this)" value=""><span class="task-title-sp" id="use">&nbsp;&nbsp;我在使用中,请勿修改时间</span></li>{% endif %}</ul></div></div><div><br><br><br><br></div>{% if serverstatus != 'others' %}<div class="col-sm-12" id="status"><input type="text" class="form-control" id="time"><div class="progress progress-striped active" style="display:none;" id="loading"><div class="progress-bar" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%"></div></div></div><div><br><br><br></div><div class="col-sm-12" style="text-align: right"><button id="putsettingtime" class="btn btn-theme02">提交修改</button><button id="putlocaltime" class="btn btn-theme02">快捷恢复系统时间</button></div><div><br><br><br></div>{% endif %}</div></div></div><div class="row mt"><div class="col-lg-6"><div class="form-panel"><h4 class="mb"> 修改时间的记录</h4><table class="table table-hover"><thead><tr><th style="width:10%;">修改时间</th><th style="width:10%;">修改人</th><th style="width:10%;">修改后服务器时间</th></tr></thead><tbody id="tab">{% for modifytime in modifytimes %}<tr><td>{{ modifytime.modifytime }}</td><td>{{ modifytime.modifyer }}</td><td>{{ modifytime.modifyservertime }}</td></tr>{% endfor %}</tbody></table></div></div></div>
</section>
{% endblock %}

  该页面所需的完整javascript代码如下,其中已经包含了下文要实现的功能函数,包括重新获取时间、修改时间、本人占用服务器不准其他人修改时间、显示修改时间的记录,具体细节可以看代码中的注释,另外代码中的swal是sweetalert2组件,文章用户登陆与session已经提到过其引用和用法。

{% block scripts %}
<script>
// 获取并局部刷新图4蓝色框中现实的服务器时间
function getservertime(){$.ajax({url:"getservertime",type:'GET',success: function(arg){ret = eval(arg);if(ret.status){$("#getservertime").html(ret.time)}else{$("#getservertime").html(ret.error)}}});
}
// 本人是否占用服务器
function isCheck(obj){if($(obj).prop("checked")){$.ajax({url:"usingserver",type:'GET',data:{'using':'yes'},});}else{$.ajax({url:"usingserver",type:'GET',data:{'using':'no'},});}
}
$(document).ready(function(){// 页面载入时候就会获取一次服务器时间$("#gettime").click(function(){getservertime();});// 修改服务器时间的函数$("#putsettingtime").click(function(){settingtime = $("#time").val();if(settingtime == ''){swal('', '请选择时间!', 'error')}else{swal({title: '将服务器时间设定为输入的时间?',type: 'warning',confirmButtonColor: '#DD6B55',confirmButtonText:"是的",  cancelButtonText:"不用",showLoaderOnConfirm: true, //加载按钮是否可见  showCancelButton: true,preConfirm: function() {  return new Promise(function(resolve) {  setTimeout(function(){$("#putlocaltime").hide();$("#putsettingtime").hide();$("#time").hide();$("#loading").show();resolve();  }, 3000);  });  },  allowOutsideClick: false, //弹框外是否可点}).then(function(res){  if(res){  $.ajax({url:"settime",type:'POST',data:{'settime':settingtime},success: function(arg){ret = eval(arg);if(ret.status){   swal({  type: 'success',  title: '时间设定完成!',  confirmButtonText: '确定',  confirmButtonColor: '#4cd964'  }).then(function(){//修改成功之后,局部刷新图4蓝色框中的显示的时间getservertime();$("#putlocaltime").show();$("#putsettingtime").show();$("#time").show();$("#loading").hide();// 向前端的修改时间记录表格中添加一条记录var tr = "<tr><td>"+ret.modifytime+"</td><td>"+ret.modifyer+"</td><td>"+ret.servertime+"</td></tr>"$("#tab tr:first").before(tr); //向table的第一行添加数据$("#tab tr:last").remove();    //删除最后一行});  }else{      //修改失败swal({  type: 'error',  title: '时间设定失败!',  confirmButtonText: '确定',  confirmButtonColor: '#4cd964'  }).then(function(){getservertime();$("#putlocaltime").show();$("#putsettingtime").show();$("#time").show();$("#loading").hide();});  }}});}});}});// 重置服务器时间$("#putlocaltime").click(function(){swal({  title: '将服务器时间设定为本地时间?',type: 'warning',confirmButtonColor: '#DD6B55',confirmButtonText:"是的",  cancelButtonText:"不用",showLoaderOnConfirm: true, //加载按钮是否可见  showCancelButton: true,preConfirm: function() {  return new Promise(function(resolve) {  setTimeout(function(){ $("#putlocaltime").hide();$("#putsettingtime").hide();$("#time").hide();$("#loading").show();resolve();  }, 3000);  });  }, allowOutsideClick: false, //弹框外是否可点}).then(function(res){ if(res) {  $.ajax({url:"recoverlocaltime",type:'GET',success: function(arg){ret = eval(arg);if(ret.status){swal({  type: 'success',  title: '时间设定完成!',  confirmButtonText: '确定',  confirmButtonColor: '#4cd964'  }).then(function(){//修改成功之后,局部刷新图4蓝色框中的显示的时间getservertime();$("#putlocaltime").show();$("#putsettingtime").show();$("#time").show();$("#loading").hide();//修改成功之后,局部刷新图4蓝色框中的显示的时间var tr = "<tr><td>"+ret.modifytime+"</td><td>"+ret.modifyer+"</td><td>"+ret.modifytime+"</td></tr>"$("#tab tr:first").before(tr); //向table的第一行添加数据$("#tab tr:last").remove();    //删除最后一行});  }else{swal({  type: 'error',  title: '时间设定失败!',  confirmButtonText: '确定',  confirmButtonColor: '#4cd964'  }).then(function(){getservertime();$("#putlocaltime").show();$("#putsettingtime").show();$("#time").show();$("#loading").hide();});  }}});}  });  });// laydata组件laydate.render({elem: '#time',type: 'datetime',theme: 'molv'});
});
</script>
// 引入laydata组件
<script src="/templates/servermaterial/assets/laydate/laydate.js"></script>
{% endblock %}

创建models.py

  django自带强大的与数据库操作相关的api,使得用户在使用数据库时只用考虑存储的逻辑,django操作数据库中的一些常用函数可以查看该文章。另外,在文章查看和修改服务器配置与数据库的路由也会提到一些数据库函数的用法。

  • 服务器被占用

  你在操作服务器时,别人也在使用服务器,当你操作(修改时间,配置)时会被别人影响服务器环境的时候,可以考虑把服务器‘锁’起来,拿修改服务器时间举个例子,我们不想让别人通过这个网站修改服务器时间,我们可以在数据库中设置一个表,用来记录服务器的任务状态,当有用户在使用这个任务时,它会在这个表中记录一条数据,别人在需要做该任务时,会发现表中有一个相同的任务在进行,没法操作。任务完成后,表中删除对应的任务记录,别人就可以进行了(简而言之,A操作的时候B不能操作)。具体如何使用后面会说到。
  对了,在初始化数据库前,需要执行python manage.py makemigrationspython manage.py migratepython manage.py migrate --database=server三条指令分别用来更新表、刷新默认的数据库和server的数据库,关于server的数据库,可以查看文章查看和修改服务器配置与数据库的路由。

class taskinbackground(models.Model):# 任务的名字taskname = models.CharField(max_length=50)# 操作人taskor = models.CharField(max_length=100)class Meta:# 别名db_table = 'task'# 数据库路由标签app_label = "server"
  • 改时间记录
class modifytime(models.Model):# 修改人modifyer = models.CharField(max_length=100)# 操作时间modifytime = models.CharField(max_length=200, default="")# 变更后服务器时间modifyservertime = models.CharField(max_length=200, default="")class Meta:db_table = 'modifytime'app_label = "server"

显示页面

  设计的时候,考虑到当用户进入http://127.0.0.1:8888/server/servertime.html网页时就能够获取时间和修改时间的记录,所以添加url和模板显示函数view,分别位于server/urls.py和server/views.py,其中server/urls.py和上文中给出javascript函数一样给出了下文中所有需要用到的功能的url,server/views.py除了给出页面显示的函数servertime之外也给出了手动通过按钮重新获取(下图4红色框)得到时间的方法getservertime功能函数。
  views中的servertime用到的函数get_server_time()可以用来访问服务器获取时间,其写在WebTool/funtions.py中,具体的函数请移步至文章服务器SSH服务配置与python中paramiko的使用。

图4 获得时间

  • server/urls.py中的代码如下:
from django.conf.urls import url
import viewsurlpatterns = [url(r'^$', views.homepage),url(r'^home', views.homepage),# 修改时间url(r'^settime', views.settime),# 显示时间页面url(r'^servertime', views.servertime),# 按钮重新获得时间url(r'^getservertime', views.getservertime),# 重置时间url(r'^recoverlocaltime', views.recoverlocaltime),# 本人占用服务器不准他人改时间url(r'^usingserver', views.usingserver),# 用户登出url(r'^userlogout', views.userlogout),
]
  • server/views.py中的代码如下:
# -*- coding: utf-8 -*-
from __future__ import unicode_literalsfrom django.contrib.auth import logout
from django.shortcuts import render_to_response
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
import json
import time# 服务器的名字
htmltitle = '服务器工具'@login_required(login_url='/loginpage')
def servertime(request):from WebTool.functions import get_server_timefrom server import modelstaskor = ''try:# 查看是否有人在占用服务器taskor = models.taskinbackground.objects.get(taskname='usingtime').taskorexcept Exception as e:print eusername = request.session.get('username')# 取出数据库后10条修改时间的数据modifytimes = models.modifytime.objects.all()[::-1][0:10]pagedict = {'time': get_server_time(), 'modifytimes': modifytimes, 'title': htmltitle, 'username': username}# 本人在使用服务器if taskor == username:pagedict['serverstatus'] = 'self'# 无人使用服务器elif taskor == '':pagedict['serverstatus'] = 'nobady'# 其他人在使用服务器else:pagedict['serverstatus'] = 'others'pagedict['taskor'] = taskorreturn render_to_response('servermaterial/servertime.html', pagedict)# 这个函数用来处理按钮【重新获取】的逻辑,请求它的url和javascipt代码已经在前面给出
def getservertime(request):if request.method == 'GET':ret = {'status': False, 'time': '', 'error': ''}try:from WebTool.functions import get_server_time# 将时间传到前端局部刷新上图4的蓝色框中显示的时间ret['time'] = get_server_time()ret['status'] = Trueexcept Exception, e:ret['status'] = Falseret['error'] = str(e)return JsonResponse(ret)return JsonResponse(ret)

  完成上面的代码之后我们就看可以显示服务器时间页面了。并且能够查看服务器时间,手动通过按钮查看服务器时间并且局部刷新网页上的时间显示。

修改时间

  • 本人占用服务器不准其他人修改时间

  控制它的javascript函数为isCheck(obj),url为上文中的url(r'^usingserver', views.usingserver)。占用服务器的任务名字叫做usingtime。

# 有人使用服务器,别人无法修改时间
def usingserver(request):ret = {'status': False}if request.method == 'GET':status = request.GET.get('using')from server import models# 我占用服务器,别人无法修改时间if status == 'yes':username = request.session.get('username')models.taskinbackground.objects.filter(taskname='usingtime').delete()models.taskinbackground.objects.create(taskname='usingtime', taskor=username)ret['status'] = Truereturn JsonResponse(ret)# 我释放服务器,别人可以修改时间if status == 'no':models.taskinbackground.objects.filter(taskname='usingtime').delete()ret['status'] = Truereturn JsonResponse(ret)

  用户访问服务器时间页面时,前端会根据后台渲染函数servertime传递的参数判断服务器使用的状态,分别是本人使用中(servertime函数中的self)、没人使用(servertime函数中的nobady)、其他人在使用(servertime函数中的others)。如下图5所示,当一个用户勾选了红框中的checkbox,其他用户会无法修改时间。前端逻辑可以直接由上文中给出的html代码看出。

图5 占用服务器

  • 提交修改的时间

  要实现该功能,还需要在server/views.py中添加这些对应的响应函数,他们都是通过前端ajax(写在上文中的javascript函数里面)请求到后台的,同样的,用到的和服务器交互的相关paramiko函数写在WebTool/functions.py中,都已经在服务器SSH服务配置与python中paramiko的使用文章中实现。重置时间和提交修改分别对应图6中红框中的按钮。

图6 修改时间

  重置时间和提交修改使用到的views函数:

# 重置时间
def recoverlocaltime(request):if request.method == 'GET':ret = {'status': False}try:from WebTool.functions import restore_server_timefrom server import models# 充值时间restore_server_time()# 获取本地的时间local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())# 获取当前的操作人username = request.session.get('username')# 数据库中记录本次操作models.modifytime.objects.create(modifyer=username, modifytime=local_time, modifyservertime=local_time)ret['status'] = True# 将修改的记录传递到前端局部刷新添加ret['modifytime'] = local_timeret['modifyer'] = usernameexcept Exception, e:ret['status'] = Falsereturn JsonResponse(ret)return JsonResponse(ret)# 提交前端给过来的时间
def settime(request):if request.method == 'POST':ret = {'status': False}try:from WebTool.functions import modify_server_timefrom server import modelsservertime = request.POST.get('settime')# 修改时间modify_server_time(servertime)# 获取本地时间local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())# 获取操作人username = request.session.get('username')# 数据库中记录改时间的记录models.modifytime.objects.create(modifyer=username, modifytime=local_time, modifyservertime=servertime)# 将操作的时间、服务器的时间、操作人传到前端局部添加ret['modifytime'] = local_timeret['servertime'] = servertimeret['modifyer'] = usernameret['status'] = Trueexcept Exception, e:ret['status'] = Falsereturn JsonResponse(ret)return JsonResponse(ret)
  • laydate组件

  组件的引入和sweetalert2的引入方法一样,将laydate组件的资源文件下载下来放到资源文件夹中,然后在前端模板中引用即可,由于基本是本页面私有的资源,我们把它放到servertime.html文件中的{% block scripts %}中(可以由上文给出的该页面完整的javascript代码看到)

图7 引入laydate组件

  引用完成后,我们可以看到点击input框之后的效果如图8所示,当然laydate组件支持更多定制,可以参考这里。选好自己的样式后修改图7中的laydate.render的字段就可以了。

图8 laydate的引用

结语

  本篇文章主要介绍了如何实现修改服务器时间等相关功能,顺带说了下如何在数据库记录任务的状态和相关前端组件的应用。写的有点乱,等把项目搭完就会把网站的源码包贴出来。

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

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

相关文章

网站漏洞修复方案防止SQL注入攻击漏洞

SQL注入漏洞在网站漏洞里面属于高危漏洞&#xff0c;排列在前三&#xff0c;受影响范围较广&#xff0c;像asp、.net、PHP、java、等程序语言编写的代码&#xff0c;都存在着sql注入漏洞&#xff0c;那么如何检测网站存在sql注入漏洞&#xff1f; SQL注入漏洞测试方法 在程序代…

phpcms ajax加载列表,phpcms v9建站 ajax列表分页加载更多word文档教程

最新文章https: open weixin qq com 有这个的账号&#xff0c;给客户开通微信小程序不需要认证费直...https: open weixin qq com 有这个的账号&#xff0c;给客户开通微信小程序不需要认证费直...相关内容phpcms调用随机栏目 随机调用SQL语句&#xff0c;可以使用PHPCMS的get标…

谷歌运维新书《网站可靠性工作手册,SRE最佳实践》

为什么80%的码农都做不了架构师&#xff1f;>>> 最近谷歌发布了一本关于运维新书《The Site Reliability Workbook — Practical Ways to Implement SRE》&#xff08;网站可靠性工作手册&#xff0c;SRE最佳实践&#xff09;。这是继《Site Reliability Engineeri…

讲讲自己亲身经历网站备案的前前后后

终于是有了自己的个人备案&#xff0c;之前网站一直是挂在公司的服务器上&#xff0c;后来在阿里云买了一台虚拟主机&#xff0c;然后就把网站搬家了。其实在这次备案之前&#xff0c;我也只是对网站备案方面有个大概的了解&#xff0c;真正的还没有自己实际操作过&#xff0c;…

【转】高扩展性网站的50条原则

《高扩展性网站的50条原则》&#xff0c;利用一天半的时间快速浏览总结的电子书&#xff0c;对网站的建设有一个原则性的把握&#xff0c;书中提到的大部分原则现在已成为互联网行业的共识&#xff0c;但并不妨碍我们重新整理分类&#xff0c;从全局层面把控高扩展性网站的建设…

centos7云主机nginx+WordPress完整建站(博客)流程记录

一、安装nginx1、安装依赖#安装gccyum install gcc-c#安装 pcre-develyum install -y pcre pcre-devel#安装zlib yum install -y zlib zlib-devel#安装OpenSSL yum install -y openssl openssl-devel2、安装nginx#创建nginx.repo文件vi /etc/yum.repos.d/nginx.repo #然后写…

centos7服务器网站不能登录,centos7无法联网_网站服务器运行维护

linux怎么启动docker服务_网站服务器运行维护linux启动docker服务的方法&#xff1a;1、使用sudo yum install 命令安装Docker。2、使用“sudo systemctl start docker”命令启动docker服务。1、修改配置文件使用 vi 编辑器修改 /etc/sysconfig/network-scripts/ifcfg-eth0进入…

HTML CSS设计与构建网站

《HTML & CSS设计与构建网站》基本信息原书名&#xff1a; HTML and CSS: Design and Build Websites原出版社&#xff1a; Wiley作者&#xff1a; (美)Jon Duckett [作译者介绍]译者&#xff1a; 刘涛 陈学敏出版社&#xff1a;清华大学出版社ISBN&#xff1a;97873023110…

网站开发必备-快速浏览Asp.Net网站绿色小工具

< DOCTYPE html PUBLIC -WCDTD XHTML TransitionalEN httpwwwworgTRxhtmlDTDxhtml-transitionaldtd> 选择此工具的理由&#xff1a;1.快速浏览Asp.Net网站 2.小巧 3.绿色 点击下载 前提&#xff0c;系统必须安装 .NET Framework 方法一. 将此程序放在网站根目录&#xff…

18个使用 jQuery 制作的创意网站欣赏

jQuery 是一个非常优秀的 Javascript 框架&#xff0c;在现在的 Web 开发项目中扮演着重要角色&#xff0c;借助 jQuery 可以让网站有更好的可用性和用户体验&#xff0c;让访问者对网站留下非常好的印象。今天这篇文章与大家分享18个使用 jQuery 制作的创意网站&#xff0c;一…

Thinkphp5开发电脑网站支付宝支付详细流程(线上测试篇)

为什么80%的码农都做不了架构师&#xff1f;>>> 在沙箱测试篇讲过的我在这里就不再做重复&#xff0c;详情请见上一篇PHP开发电脑网站支付宝支付详细流程&#xff08;沙箱测试篇&#xff09; 在沙箱测试的时候使用的是沙箱环境中的配置&#xff0c;现在进行线上测试…

SEO思维:如何运用数据分析论坛签名和外链在百度新算法中的效果

2012年08月22日通过站长平台发布官方公告&#xff0c;为了提高用户体验、清除低质采集的垃圾内容&#xff0c;百度将在6月底反作弊算法的基础上再度升级&#xff0c;对大量低质量、无内容的站点进行清除。并打击胡乱采集、超链接作弊、堆积关键词、冒充官网,等严重影响用户体验…

网站转接支付宝解决方案

大型网上购物系统除了能让会员选择货到付款结账方式外&#xff0c;还应该提供一些更方便快捷的网上支付方式。如果网上商店没有足够的实力提供会员直接在网站中建立现金账户的功能&#xff0c;就可以将订单信息转接到支付宝&#xff0c;让会员从支付宝付款。当然就算会员可以在…

Python3代码实现《机器学习实战》k近邻算法改进约会网站配对效果中出现的问题

报错1&#xff1a;No module named ‘kNN’ 解决&#xff1a; 转而在Spyder中&#xff0c;先保存在自己的学习目录中&#xff0c;然后在命令提示符完成操作&#xff0c;保证目录要一致&#xff0c;也就是下面图中打马赛克的4个。 报错&#xff1a; name ‘reload’ is not def…

网站的高性能架构

原文地址&#xff1a;http://www.uml.org.cn/zjjs/201312192.asp 瞬时响应&#xff1a;网站的高性能架构作者 李智慧&#xff0c;火龙果软件 发布于&#xff1a;2013-12-19什么叫高性能的网站&#xff1f; 两个网站性能架构设计方案&#xff1a;A方案和B方案&#xff0c;A方案…

VS.NET2013发布网站的时候去掉.cs文件(预编译)(转)

在要发布的网站上右键&#xff0c;选择"发布网站"。在发布窗口中&#xff0c;会让你选择一个发布配置文件&#xff0c;没有的话点击下拉菜单在里面选择新建一个。NEXT.好&#xff0c;现在发布一下网站。发布出来的文件没有包含*.cs文件。打开bin目录&#xff0c;会发…

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

转自&#xff1a;http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html 之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详…

Linux部署集群.NET网站

一、Linux下面安装需要软件 我们这里需要安装的软件有&#xff1a;1) Mono 3.2.8 : C#跨平台编译器&#xff0c;能使.Net运行与Linux下&#xff0c;目前.net 4.0可以完美运行在该平台下2) nginx/1.4.6 &#xff1a;web服务器, 支持方向代理3) fastcgi-mono-server4 &#xff1a…

在mvc4中多语言建站的实例

环境&#xff1a;vs2012 asp.net mvc4. 实现方式&#xff1a;resource 资源文件&#xff0c;根据路由规则中Lang参数来判断载入哪种语言方式 在网上找到了相关资料&#xff0c;顺便自己做了个练习&#xff0c;新建工程之类的步骤就免了&#xff0c;该注意的地方说明下&#xff…

台北到淡水版Firefox新标签页myNewTab网站链接修改

台北到淡水版的Firefox用的新标签页&#xff08;也叫快捷导航、九宫格等&#xff09;是myNewTab&#xff0c;如何修改里面的链接呢&#xff1f;如下&#xff1a; 1、点击右上角的”定位“​ 2、将会打开该文件的所在位置&#xff0c;例如&#xff1a;D:\应用程序\火狐浏览器\Pr…