bos表格添加必填项_【Python成长之路】从 零做网站开发 -- 基于Flask和JQuery,实现表格管理平台...

news/2024/5/9 11:27:13/文章来源:https://blog.csdn.net/weixin_29062823/article/details/112091594

【写在前面】

你要开发网站? 嗯。。

会Flask吗? 什么东西,没听过。。。

会JQuery吗? 是python的库吗 ?

那你会什么? 我会F12打开网站

好吧,那我们来写个简单的表格管理平台。

基于Flask框架和JQuery实现管理平台网站的开发功能,我代码编写用了2天的时间 ,从零开始写;又对具体实现流程,自己断断续续地整理总结了近半个月。从自我感觉来说,整个过程和结果的实现都让我很满意。

【效果如下】

3eb03e256de5e3756a57e9704c555f10.gif

【第一步】了解Flask框架

1、了解python 主流的web框架

(1)Django:简单来说就是重武器,是最全能的开发框架,你想要的功能它都有;但是比较繁重,适合企业级的web开发;

(2)Flask:属于web开发微框架,小巧灵活,相关的第三方库丰富,适合开发小型web;

(3)Tornado:天生异步,性能强悍,但是框架提供的功能少,需要开发者自己实现;

因此,本文代码实现主要是基于Flask实现的。

2、了解Flask框架

(1)HelloWorld实现:

几乎所有的编程都是基于“hello world”实现的,因此也大致讲下helloworld涉及的内容。

from flask import Flask
app = Flask(__name__)@app.route('/')
def hello_world():return "Hello world!"if __name__ == '__main__':app.run()

先声明一个Flask框架的对象,然后定义路由'/',即URL地址为 http://127.0.0.1:5000/;如果定义路径为‘/new’,那对应的访问地址需要改为http://127.0.0.1:5000/new。另外,@app.route是个装饰器。

(2)如何实现具体IP地址或者端口的访问呢?

app.run(debug=True,host="x.x.x.x",port="1234")

通过对app.run()方法的参数定义,分别实现了调试功能,访问URL变更为 http://x.x.x.x:1234

这里调试功能还是很好用的,不但可以帮助开发者重新加载网页,而且会打印详细的错误信息,协助定位。

f5ebc0f8dcd38765ab0975b1a8dd2f27.png

(3)如何在web上显示自己特定的html模板

from flask import Flask,render_template
app = Flask(__name__)@app.route('/')
def hello_world():return render_template('test.html')if __name__ == '__main__':app.run()

只需要导入render_template库,并且在函数返回时改成对应的方法即可。

不过 这 里要 注意,test.html必须保存在工程目录与下template文件下,否则会报错。(这是因为render_template方法定义时默认写了template路径 )

【第二步】了解Sqlite3数据库

web数据交互离不开后台数据库的管理,本章节重点解释python自带的sqlite3数据库。相比较于其他“正规”的数据库,如mongo、solr、MySQL等,sqlite3相当简单,属于轻量级的数据库。

1、sqlite3数据库的安装和创建

用pip命令可以下载安装sqlite3数据库

创建数据库:

con = sqlite3.connect('material.db')

如果有数据库material.db,则进行连接数据库的操作;如果没有此数据库,则先创建数据库再进行连接;

2、创建数据表

label = ['ID','网络IP','地址','责任人','联系方式']
content = ['1','10.10.10.10','杭州滨江','鹏哥','123456']def create():sql = 'create table {0} ({1},{2},{3},{4},{5})'.format(tablename,label[0],label[1],label[2],label[3],label[4])result = cur.execute(sql)con.commit()return  True if result else False

简单描述为:create table 表名 (各字段名1,各字段名2……)

当前对数据表的字段未进行输入类型及长度的限制,比如需要规则ID为必填项,并且为整形,长度在10个字节内,则需要修改为

sql = 'create table matrial_table ("ID" int[10] primary key not null )'

同理,其他字段也可以相同的方式进行类型、长度的限制。

注意:在执行cur.execute()后,要记得con.commit()进行数据库提交,否则数据并不会真正写入数据库中。

3、插入数据

def insert():sql = 'insert into {0} ({1},{2},{3},{4},{5}) values({6},"{7}","{8}","{9}","{10}")'.format(tablename,label[0],label[1],label[2],label[3],label[4],content[0],content[1],content[2],content[3],content[4])result = cur.execute(sql)con.commit()return  True if result else False

简单描述为:insert into 表名 (各字段名1,各字段名2……) values(数值1,数值2……)

这 里要注意,”{7}“ 是有加双引号的,为什么呢?因为”{7}“对应的是网络IP,是个字符串,因此需要加 双引号,否则会报错。

4、查询数据

def query():sql = 'select * from {0}'.format(tablename)result = cur.execute(sql)return list(result)

简单描述为:select XX,XX from 表名 where 字段名1="数值1"

5、更新数据:update 表名 set 字段名1=”数值1“ where 字段名2="数值2"

6、删除某条数据:delete from 表名 where 字段名1="数值1"

【补充】

如果生成了db数据库,如何查看呢?可以下载一个SQLite Expert,打开后就可以很直观地进行数据库查看,并且可以通过图形化按钮进行 数据表的增删改查。

9d32f4613eec02d60f36a2dbaae2c637.png

【第三步】了解html

1、Flask框架方法编写

前面已经讲过 Flask如何调用html模板,因此我们直接展示上图对应的flask框架方法的代码

# coding=utf-8
# @Auther : "鹏哥贼优秀"
# @Date : 2019/9/23
# @Software : PyCharmfrom flask import Flask,render_template
import sqlite3
app = Flask(__name__)
con = sqlite3.connect('material.db',check_same_thread=False)@app.route('/')
def Material_Mangement():# 获取数据库material_table表的内容cur = con.cursor()sql = 'select * from {0}'.format("material_table")cur.execute(sql)content = cur.fetchall()# 获取数据库表的表头labels = [tuple[0] for tuple in cur.description]return render_template('test.html',content=content,labels=labels)if __name__ == '__main__':app.run(debug=True)

动态路由、sqlite3数据库操作、调试模式的设置,这些知识请参考之前的博客。但有2个知识点,我想再提下:

(1)如果在数据库连接时,不添加check_same_thread=False参数,则

数据库连接会报错:sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread. The object was created in thread id XX。

这是因为sqlite3数据库被多线程访问导致冲突,因此这里要注意下。

(2)获取数据库表头:labels = [tuple[0] for tuple in cur.description]

2、Html文件(仅展示表格内容)

动态路由、sqlite3数据库操作、调试模式的设置,这些知识请参考之前的博客。但有2个知识点,我想再提下:

(1)如果在数据库连接时,不添加check_same_thread=False参数,则

数据库连接会报错:sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread. The object was created in thread id XX。

这是因为sqlite3数据库被多线程访问导致冲突,因此这里要注意下。

(2)获取数据库表头:labels = [tuple[0] for tuple in cur.description]

2、Html文件(仅展示表格内容)

<!doctype html>
<html lang="en">
<head><!-- Required meta tags --><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><!-- Bootstrap CSS --><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous"><title>物料管理平台</title>
</head>
<body>
<div class="row"><div class="col-md-6 col-sm-12 col-xs-12"><div class="panel panel-default"><div class="panel-heading"><h3>表格管理平台</h3></div><div class="panel-body"><div class="table-responsive"><table class="table table-striped table-bordered table-hover"><thead><tr>{% for i in labels %}<td>{{ i }}</td>{% endfor %}</tr></thead><tbody>{% for i in content %}<tr>{% for j in i %}<td>{{ j }}</td>{% endfor %}</tr>{% endfor %}</tbody></table></div></div></div></div></div>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy"crossorigin="anonymous"></script>
</body>
</html>

对应的效果是这样的:

bee34eab607ab466aa8d4e6c1fc8c111.png

因为一开始接触flask时,我只调试过html,但是根本没具体接触过html怎么写。因此上述这段代码是参考于大神的代码(https://blog.csdn.net/a19990412/article/details/84955802)。

熟悉这段代码后,我觉得有几块内容是和我要实现的代码有关的。

(1)title 标题修改

(2)表格的长宽大小:<div class="col-md-6 col-sm-12 col-xs-12"> 。 col-xs-*和col-sm-* 和col-md-*(col-xs表示超小屏幕,col-md-中等屏幕,col-sm-小屏幕)主要是用来适应不同屏幕的表格展示。因此需要自适应调整对应的数值。

(3)设置表格的ID:<table class="table table-striped table-bordered table-hover",id="test">。这里其实不设置id也是可以的,但是后续我要对表格进行编辑时,加上id会方便我定位表格,方法是:tab = document.getElementById("test")

3、Html文件(添加编辑、提交按钮)

根据上述要修改的点,我重新修改了html内容,新的html代码如下:

<!doctype html>
<html lang="en">
<head><!-- Required meta tags --><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><!-- Bootstrap CSS --><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous"><title>表格管理平台</title>
</head>
<body>
<div class="row"><div class="col-md-12 col-sm-12 col-xs-12"><div class="panel panel-default"><div class="panel-heading"><h3>表格管理平台</h3></div><div class="panel-body"><div class="table-responsive"><table class="table table-striped table-bordered table-hover"><thead><tr>{% for i in labels %}<td>{{ i }}</td>{% endfor %}</tr></thead><tbody>{% for i in content %}<tr>{% for j in i %}<td>{{ j }}</td>{% endfor %}<td><input type="button" value="编辑"></td><td><input type="submit" value="提交"></td></tr>{% endfor %}</tbody></table></div></div></div></div></div>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy"crossorigin="anonymous"></script>
<script>(function(){$('input[type="button"]').on('click', function(){var $this = $(this),edit_status = $this.attr('edit_status'),status_value = edit_status && 1 == edit_status ? 0 : 1,$td_arr = $this.parent().prevAll('td');$this.val(1 == status_value ? '完成' : '编辑').attr('edit_status', status_value);$.each($td_arr, function(){var $td = $(this);if(1 == status_value) {$td.html('<input type="text" value="'+$td.html()+'">');} else if(0 == status_value){$td.html($td.find('input[type=text]').val());}});});})();
</script>
</body>
</html>

相比于第 2步时的html文件,这次我主要添加了2块内容:

(1)添加编辑、提交按钮:

<td><input type="button" value="编辑"></td>   <td><input type="submit" value="提交"></td>

将这两行代码放在表格每行最后,就会生成相应的按钮

(2)编辑功能的实现:

编辑按钮对应的function是基于JQuery写的,当然这 段代码我也是参考另一位大神的

(https://blog.csdn.net/luo201227/article/details/50559988),因为当前我对JQuery完全一无所知。

但是在熟悉代码后,我根据自己对代码的理解进行了注释。

<script>(function(){<!--定义属于是 button的按钮在点击后,产生下面的function功能-->$('input[type="button"]').on('click', function(){<!--获取当前事件,并进行当前按钮的状态,如果是编辑状态,就进行将每个单元格设置成可输入状态-->var $this = $(this),edit_status = $this.attr('edit_status'),status_value = edit_status && 1 == edit_status ? 0 : 1,$td_arr = $this.parent().prevAll('td');$this.val(1 == status_value ? '完成' : '编辑').attr('edit_status', status_value);<!--如果单元格是可编辑状态,获取每列元素的值,并在最后html表格上进行展示-->$.each($td_arr, function(){var $td = $(this);if(1 == status_value) {$td.html('<input type="text" value="'+$td.html()+'">');<!--如果按钮状态是完成状态,直接展示单元内的值-->} else if(0 == status_value){$td.html($td.find('input[type=text]').val());}});});})();
</script>

细心的同学会发现,我在点击”提交“按钮时,什么都没 发生。是的,”提交“功能,我将在下一个章节中进行介绍。

【第四步】了解JQuery

1、提交功能的实现,对我来说,最难的是html对前台数据的传输。因此,我就参考着编辑功能,自己一 点点写。以下是示例代码:

(1)HTML文件编写前台界面提交功能

<script>(function(){<!--定义属性是submit的按钮在点击后,产生下面的function功能-->$('input[type="submit"]').on('click', function(){<!--获取当前行的id -->var td = event.srcElement.parentElement;var rownum = td.parentElement.rowIndex;<!--获取html表格元素 -->var tab = document.getElementById("test");<!--将每个单元格元素进行取值,并以字典形式传给后台 -->var data = {"ID":tab.rows[rownum].cells[0].innerHTML,"网络IP":tab.rows[rownum].cells[1].innerHTML,"地址":tab.rows[rownum].cells[2].innerHTML,"责任人":tab.rows[rownum].cells[3].innerHTML,"联系方式":tab.rows[rownum].cells[4].innerHTML,};alert("提交成功!")$.ajax({type: "get",url: "/edit",data: data,dataType: "json"});});})();

(2)后台对提交后的数据进行读取,并写数据库

@app.route('/edit', methods=['get'])
def edit():label = ['ID', '网络IP', '地址', '责任人', '联系方式']content = [request.args.get(i) for i in label]print(content)sql = 'update {0} set {1}="{6}",{2}="{7}",{3}="{8}",{4}="{9}" where {5}={10}'.format('material_table',label[1], label[2], label[3],label[4],label[0],content[1],content[2],content[3],content[4],content[0])cur = con.cursor()cur.execute(sql)con.commit()return "数据写入成功!"

在实现“提交”功能时,我主要遇到了以下几个 坑:

(1)html代码写完后,发现程序报错,提示$.ajax is not a function。我去,我看其他大神的数据交互也是这么写的呀,为什么我这不行?

a555c5bc2c70bec1dcb6bc5fa2fb8c58.png

查看网上的帖子,都是说未定义或者和其他库有冲突,最后我自己发现,是因为我没有声明是JQuery。需要在script前面加上一行代码:

<script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>

我理解这行代码的意思是声明下面要JQuery库,而不是其他JS库。(可能理解有误)

最后加上这行代码后,问题成功解决!

(2)获取当前行号

一开始在获取行号,怎么获取不到,而且不知道要怎么调试,在同事的指导下,才学会通过alert(td.innerHTML)来查看获取的当前行内容是什么。

最初从网上 查到获取当前行的写法是:

var td = event.parentElement;
var rownum = td.parentElement.rowIndex;

通过alert调试,发现点击提交根本没有反应;又改成

var td = event.srcElement;
var rownum = td.parentElement.rowIndex;

结果是获取不到任何内容

f40b25327c3ba099ea70803e6d412f0c.png

就这么个小问题就花费了我近2个小时的时间去不停地查资料,尝试编写。最后想说的是,如果对html不熟悉,还是应该找个大神带带自己的。

c728dbed09d14ba09669ff0ae794ca39.png

最后在别人的协助下,实现了获取当前行的功能:

(3)获取每个表格里的 内容

tab.rows[0].cells[0].innerHTML

在获取单元格内数据时,最验证的是我获取不到tab,即表格元素。因为我原先没有在表格元素里加id,即

8bea21e964b63ce0892c3953f62637cc.png

网上找了很多方法都没法实现,最后老老实实地加上 id="test"

讲道理,html里的这 20行代码是我搞这个表格管理平台时,花费最大精力的。至此,表格管理平台的功能基本成行 !

【第五步】添加新增功能

以上功能只实现了对现有数据的编辑保存功能,但是如果用户想要新增数据,怎么办?我当时第一个想法是让用户自己去改数据库,哈哈。还要我去写新增功能,要累死了,不想写。

下面是关于新增功能的介绍和示例代码。

1、如何添加“新增”按钮

<td><input type="button" value="新增" id="create"></td><br>

如果前面 的html能看懂了,这行是不难理解的。

2、点击新增按钮后,如何动态增加表格行、列

<script>(function () {$('input[id="create"]').on('click', function(){var editTable=document.getElementById("tbody");var tr=document.createElement("tr");var td1=document.createElement("td");td1.innerHTML="";tr.appendChild(td1);editTable.appendChild(tr);

首先定义tr元素,然后在tr元素中再追加td元素。如果表格里有多列数据,那只需要重复td1的写法,进行复制粘贴就可以了。

另外,当前td.innerTHML是设置为空,如果要将该单元格直接设置为编辑状态,则修改成 :

td1.innerHTML="input[type=text] /";

3、如何动态添加“编辑”、“提交”按钮,下面以“编辑”为例

var td9 = document.createElement("td")
var myedit =document.createElement("input");
myedit.type = "button";
myedit.value = "编辑"
myedit.id = "edit"
td9.appendChild(myedit)

添加方式和添加文本框方式是一样的,只是需要注意元素类型是Input,并且要补充下元素的type/value/id。

4、如何对动态添加的按钮进行事件绑定,下面以提交功能为例

$('input[id="submit"]').on('click', function(){alert("test")
}

关于动态添加的按钮进行事件绑定有很多帖子,有用Live方法的,有用$(document).on('click','.edit',function()方法的,其实不用这么麻烦,和正常的“提交”写法是完全一样的。

5、获取当前新增行内的数据,进行提交。

 var tab = document.getElementById("test");var rownum = td1.parentElement.rowIndex;$('input[id="submit"]').on('click', function(){var data = {"ID":tab.rows[rownum].cells[0].innerHTML,};alert("新增成功!")$.ajax({type: "get",url: "/create",data: data,dataType: "json"});});

这段代码和提交功能的实现是一样的,大同小异。

更多精彩内容,请滑至顶部点击右上角关注小宅哦~

9f946f7186899f7726529ff83eeb33cd.png

作者:鹏哥贼优秀

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

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

相关文章

数字IC设计必备网站

1.EETOP-创芯网 原:中国电子顶级开发网&#xff09;是一家专为中国电子工程师、芯片工程师和电子设计主管提供半导体电子技术开发应用资讯的网络传媒。其内容服务核心是快速传播半导体集成电路领域的最新技术产品&#xff0c;新闻资讯&#xff0c;电子技术应用知识&#xff0c;…

fastjson之toJSONString、parseObject和SerializerFeature类

简介fastjson是一个java编写的JSON处理器依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.31</version> </dependency> 常用的方法都是静态方法 public static final Object …

我的github,自己的域名与网站

day 1 听oeasy老师的课&#xff0c;今日笔记&#xff1a; 1.登陆github&#xff0c;新建一个库 2.设置setting 中的page theme 3.新建一个h5.md&#xff0c;修改了内容。 4.点击github page下方的链接访问新的h5.md 5.将圈起来的网址复制&#xff0c;在草料二维码生成二维码&…

如何搭建公司网站?

简介&#xff1a; 我们搭建企业网站有以下几种常见方式 1、自己建站。 2、使用模板建站。 3、招聘网站设计人员搭建网站。 4、找外面的网站设计公司。 5、由国内云计算厂商完成建站工作。现在是互联网时代&#xff0c;很多企业都注重互联网&#xff0c;通过做公司网站进行展示及…

7个优秀的资源网站,值得收藏一波!!

原文地址&#xff1a;https://www.fang1688.cn/ziyuan/2714.html1. 简历生成网站https://www.wondercv.com一键生成自己的简历2. 在线游戏小霸王&#xff0c;童年的回忆有很多小时候都玩过的游戏&#xff0c;值得回味https://www.yikm.net3. 论文文献的资源库http://www.oalib.…

ipv4服务器不显示怎么办,如何解决docker端口映射时IPV4无法使用_网站服务器运行维护...

如何解决docker不能push给http_网站服务器运行维护docker不能push给http的解决方法 &#xff1a;首先在“/etc/docker/”目录下创建“daemon.json”文件&#xff1b;然后在该文件中添加安全配置&#xff1b;最后重启docker即可。如何解决docker端口映射时IPV4无法使用&#xff…

5年Python生涯总结出10个玩Python必备的网站

“玩Python必备的10大精品网站” 5年Python沉淀&#xff0c;总结一下作为一个Python玩家&#xff0c;必须要知道的十大精品网站。 无用请吐槽&#xff01; 有用请点赞&#xff01;&#xff01; 爱我请三连&#xff01;&#xff01;&#xff01; 目录 一、模块查询 二、闯关游戏…

企业网站 源码 服务邮箱:_后来才知道:长春企业邮箱一站式服务

后来才知道&#xff1a;长春企业邮箱一站式服务 qnmsptdb后来才知道&#xff1a;长春企业邮箱一站式服务 我们总觉得&#xff0c;只有熬夜&#xff0c;才能显得自己忙。的策略。一家的站方案&#xff0c;网页排名、关键词、整站都是重要的。您可以先给他们给您一个初步的思路&a…

h5网站模板_有哪些相见恨晚的模板网站?

模板网站&#xff0c;可谓是当代最受欢迎的网站类型之一&#xff0c;只要提供的足够新颖能够满足需求&#xff0c;必然成为懒癌青年们的最爱。这些网站深受喜爱的原因是&#xff1a;大家想要实现某种设计需求&#xff0c;但窘于自己技术没达到&#xff0c;时间来不及现学现卖等…

礼品代发网站源码_礼品代发正式代替空包,使用时要注意这些问题

补单的朋友大多数都使用过空包&#xff0c;但两个月前&#xff0c;各大空包供应商被查&#xff0c;大量空包网站倒闭。前段时间&#xff0c;被抓的空包大佬的新闻一度爬上了微博热搜第二。自此&#xff0c;空包退出历史舞台。而代替空包位置的则是小礼品代发。礼品代发也分多种…

想做一个显示全国火车运行图的网站(1)想想

这一“想”貌似有一个把月了&#xff0c;实现难度片以为还不算高&#xff0c;主要依靠的当然是开放的AIP接口。 首先想到的是51ditu&#xff0c;想想国人自己开发的肯定可以对自己的口味。翻看了文档之后觉得GIS这一块还真是有一些学问&#xff0c;于是又研读起google map api。…

15个优秀的Google提供给网站建立者的工具

一直以来&#xff0c;Google 为 Web 开发与设计者推出了大量的免费工具&#xff0c;让他们更好地创建&#xff0c;维护&#xff0c;改善他们的 Web 站点&#xff0c;这些工具包含了开发&#xff0c;分析&#xff0c;维护&#xff0c;修补等等用途。最重要的是&#xff0c;他们都…

AWWWB 网站克隆器 v2.0发布

软件名称&#xff1a;AWWWB.COM网站克隆器 开发商&#xff08;主页&#xff09;&#xff1a;www.awwwb.com 联系人&#xff1a;awwwb.comqq.com 软件性质&#xff1a;免费软件/开源软件 软件描述&#xff1a; AWWWB.COM网站克隆器&#xff1a;输入被克隆网站的首页网址&#xf…

如何让网站整体或局部变为黑白灰

1.如果想让整站变灰&#xff0c;请在全局css文件中&#xff0c;加入以下代码 html {filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale1);}2.如只想针对所有图片 img{filter:Gray;} 3.只让指定图片变为灰色&#xff0c;比如logo .huise{filter:Gray;} <img sr…

常用SEO查询工具

SEO工作者经常需要一些SEO工具的辅助&#xff0c;比如网站收录查询、PR查询等等&#xff0c;以便节省自己的时间&#xff0c;让SEO变得更加轻松。那么&#xff0c;常用的SEO工具都有哪些呢?月光博客今天就介绍一些常用的SEO工具网址&#xff0c;并将其进行分类&#xff0c;希望…

建站工具推荐—logo制作

建站工具推荐—logo制作 本博建立这么久了~~ 今天推荐一些我用到的一些工具&#xff1a; 1.广告牌生成器&#xff08;阿里妈妈&#xff09;http://banner.alimama.com/ 本博的logo就是用这个制作的&#xff0c;简单方&#xff0c;懒的用PS了。 2.网站LOGO免费在线制…

40款不容错过的个人摄影设计作品集网站

日期&#xff1a;2012-11-7 来源&#xff1a;GBin1.com 如果你不仅仅是网站设计师同时也是摄影师爱好者的话&#xff0c;那么拍摄高水准的摄影作品绝对可以为你的工作带来更大的帮助&#xff01;你可以将这些照片处理后放到你设 计的网站上&#xff0c;绝对是件了不起的作品。…

HubSpot – 网站开发必备的 jQuery 信息提示库

HubSpot 一款功能丰富的 jQuery 消息提示插件。它可以帮助你个性化显示您的应用程序的事务性消息。您可以轻松地包裹 Ajax 请求进度&#xff0c;成功和错误消息&#xff0c;还可以添加操作链接到您的消息中。 HubSpot 内置五种风格的主题&#xff0c;以及可以定义六种显示位置&…

(copy)MVC4.0网站发布和部署到IIS7.0上的方法

最近在研究MVC4&#xff0c;使用vs2010&#xff0c;开发的站点在发布和部署到iis7上的过程中遇到了很多问题&#xff0c;现在将解决的过程记录下来&#xff0c;以便日后参考&#xff0c;整个过程主要以截图形式呈现 vs2010的安装和mvc4的安装不在本次记录之列&#xff0c;主要记…

VS2015 使用 Web Deploy 发布网站到 WindowsServer2008 R2服务器详解

使用原因&#xff1a;由于开发期间需要将开发出的网站随时提交到服务器以便公司高层随时访问所以要求将开发出的网站每天发布到服务器&#xff0c;频繁度比较高&#xff0c;因此不能再使用之前的方式&#xff08;发布到本地后再拷贝文件到服务器&#xff09;&#xff0c;所以想…