您好,欢迎光临有路网!
Rails项目实战剖析与技巧大全
QQ咨询:
有路璐璐:

Rails项目实战剖析与技巧大全

  • 作者:(美国)(Eldon Alameda)阿兰梅达 张若飞 王峰 马连浩
  • 出版社:电子工业出版社
  • ISBN:9787121068775
  • 出版日期:2008年01月01日
  • 页数:537
  • 定价:¥59.80
  • 分享领佣金
    手机购买
    城市
    店铺名称
    店主联系方式
    店铺售价
    库存
    店铺得分/总交易量
    发布时间
    操作

    新书比价

    网站名称
    书名
    售价
    优惠
    操作

    图书详情

    内容提要
    如果你是一个已经领略过Ruby on Rails威力的开发人员,又想进一步提升Rails技能,本书对你而言将是无价之宝。本书的**并不在于该框架的应用基础,而是聚焦于带你感受众多真实案例的开发实践,包括博客、个人备忘录、日历、一个由PHP移植为Rails的网站实例等。每一应用实例均来自*佳实践,包括类型、功能、多种Rails插件应用、Rails引擎和Ruby Gem。同时,也探讨*先进的Rails功能,诸如新的REST执行和Active Resource。作为必要的回顾,本书在直接进入项目实践之前,先向读者介绍了一个理想开发环境的建立。全书内容包括:如何基于Windows、Mac OS X和Linux建立Rails;如何配合MySQL and SQLite数据库使用Rails;如何合并*新插件、引擎和Ruby Gems到应用中,以节省开发时间;如何使用Yahoo YUI轻松实现一致的应用风格;如何将PHP站点翻新为Rails;如何使用Ajax技术为应用增色;如何使用*先进的Rails功能,如REST和Active Resource。
    本书适合程序开发人员参考学习,还可以作为高等院校相
    文章节选


    关于作者
    Eldon Alameda是一名Web开发人员,现居住于气候寒冷的堪萨斯州。他现在为堪萨斯市一��刚起步的小型科技公司开发Ruby on Rails应用。在这之前,他在当地的广告公司、Sprint PCS及IBM等多家公司从事过软件开发工作。
    关于技术评审
    Paul Bentley已经有10多年专业软件的开发经验。他涉猎过计算机的许多领域,其中包括从嵌入式设备到3D图形等。他尤其精通电话技术领域,不管是在传统的计算机电话技术方面,还是在基于SIP的解决方案方面都有相当丰富的经验。他现在使用Rails来开发Web应用程序,以为解决企业应用的一系列问题提供稳定的方案。
    致谢
    说实话,写本书真的很难。其实我更想说的是,如果没有许多人的帮助、耐心及智慧,这本书也就根本不可能与大家见面。
    Keir Thomas、Chris Mills和Ben Renow-Clarke也曾参与了这个项目,感谢你们对整个项目的指导、建议和帮助。
    Paul Bentley是本书的技术评审,感谢你花了很长时间审阅本书的代码,你那些见解深刻的评论及鼓励的话语一直激励着我们。
    Tracy Brown Collins是本书的项目经理,感谢你为了保证一切处于正轨而不知疲倦地工作,也感谢你在交稿期限到来时对我的通融。
    Heather Lang是本书的文字编辑,感谢你对本书文字上的修改及润色。
    感谢Laura Cheu和她的产品团队,你们为了能让本书尽快上市所做的辛勤工作,以及容忍我每次在*后时刻的改变。在很多时候你们拯救了我,任何言语也无法表达我对你们的感激之情。
    感谢我的妻子Dori,感谢你的善良、支持、鼓励及在过去的9个月里对家庭的照顾,还要感谢你在每次晚饭帮我订辣鸡翅时,(几乎)从来都没有抱怨过。
    *后,我要感谢我的女儿Kaylee,她是我的阳光,总是能给我带来笑声。
    大多数培训书籍和课程的不足
    在我的职业生涯中,曾经参加过许多技术培训课程,并且发现其中的大多数都有一个共同的缺点——实际上没有教授任何东西。我整个星期都坐在一间教室里,仅仅来证明我能够遵循按部就班的指导。但是,我即使整天做着白日梦,也可以通过大多数这些课程。实际上只有当我回到办公室,独自面对(由于没有一个**的网络)需要解决的技术问题时,才能真正掌握那些知识。也许只有在没有理想环境的条件下,又不得不在实际中运用某项技术时,它的优点和缺点才能充分地展示出来。我相信许多读者也都有过同样的经历。
    不幸的是,如今许多的编程书籍似乎也有了同样的缺点。这些书规定了创建应用程序的每个步骤,我们只需要按照“paint-by-numbers”一样的方式去执行就可以了(“paint-by-numbers”是一种绘画方式,先在底稿上将图片轮廓画好,然后在图上用数字标好每一块区域,*后只需要在每一块区域中上色就可以了)。这样即使看完了全书,也只能说明你可以遵循按部就班的指示罢了。但是,我想写一本与众不同的书。
    的确,我热爱Ruby on Rails,并坚信它是当今*好的Web开发框架之一。Rails给我的开发工作带来了许多快乐,也使我成为了一个更好的开发商。所以,当有机会写这本书的时候,我希望能写一些可以使读者同样对Rails产生热爱的东西。于是我重温了当前有关Rails的书籍,发现它们大致可以归为以下几类。
    ? 起步介绍型:主要介绍Rails的结构、约定习惯及特性。这样的例子有《Beginning Rails: From Novice to Professional》(Jeffrey Allan Hardy,Cloves Carneiro Jr.及Hampton Catlin. Apress,2007),《Agile Web Development with Rails》(Dave Thomas,David Hansson,Leon Breedt和Mike Clark. Pragmatic Bookshelf,2006),甚至包括《Ruby on Rails for Dummies》(Barry Burd. For Dummies,2007)。
    ? 单一项目型:这种书属于填鸭式(就是把知识一味灌输给学生)教育,主要让读者一步一步地跟着书上步骤来创建一个项目,例如用Ruby on Rails来创建一个社交网站或者电子商务网站。
    ? 解决特定问题型:这些书主要针对于**Rails开发商,并通过简短的代码段来说明一些问题的解决方案,例如增加认证控制功能等。
    ? 参考书型:这类书也是针对于**Rails开发商的,它对某一特性或者Rails开发的相关组件进行了深入剖析,例如**的《Ruby for Rails:Ruby Techniques for Rails Developers》(David Black. Manning Publication,2006),以及《Pro ActiveRecode:Databases with Ruby and Rails》(Kevin Marshall,Chad Pytel和Jon Yurek. Apress,2007)、《Deploying Rails Applications A Step-by-Step Guide》(Ezra Zygmuntowicz和Bruce Tat. Pragmatic Programmer,2007)等书。
    通常,我建议对学习Rails有兴趣的人按照如上顺序来阅读相关书籍。由起步的Rails书籍开始,然后按照书上步骤去做一些项目,积累一些实际经验。*后,再看些能够进一步加深认识的书籍。
    这本书有什么不同
    在上面列举的几种书中,我相信读者从项目型的书中获得的Rails知识*多。但是,即使像Rails这么有意思的主题,这些书也会阻碍读者的思维发散,*终只能一步一步按照书中的指示操作,而不是从中去拓展思路。当然,我也不是要把这类书一棒子都打死,实际上我自己也阅读了大量这类的书籍。
    我希望能让读者从一名Rails初学者尽快地成为一名有经验的Rails开发商。我希望不只是教给读者如何创建一个Rails应用,而是教给读者相关的实现方法和知识,使得你可以自己来完成这一类项目的开发,这样你选择这本书才算是物超所值。
    所以,本书不只是简单地向读者介绍一个独立应用的创建过程,而是与读者一起去完成多种类型的项目。书中所选的每一个项目不仅会让读者掌握Rails的核心特性(例如缓存和REST方式的路由),而且为了激发读者的兴趣,我们还对某些问题进行了深入探讨,其中的每一个项目都能很容易地扩展成单独的一本书。
    学会独立思考
    除此之外,我不仅没有将每个项目扩展成为一本独立的书,用填鸭式的方法一步一步指导读者,反而将每个项目的规模缩小了一些,仅向读者提供了每个项目的原始版本。这样不仅能够保证项目可以成功运行,而且读者可以很容易地进行修改和扩展,以便使其更符合自己的需求。每当描述这本书的时候,我都把它比喻成是在教别人学骑自行车。从这点来说,我的任务就是教会读者如何上车和前进,然后让读者自己去学会如何掌握方向和平衡,直到学会骑自行车。
    在每一个项目的*后,我都设置了一些读者需要去思考的问题。因为我相信只有实践才是检验真理的**标准,所以我会在这个部分指出项目中一些不尽如人意的地方,来让读者进行修改。另外,这里提出了一些非常有意思的见解,可能会使读者从新的角度来看待项目。强烈建议读者完成其中的每一个练习,相信读者能够通过这些练习更好地拓展自己的思路。
    本书中不涉及的内容
    当然,撰写这样的一本书需要忍痛割舍掉很多想要涉及的内容。如果我将这些内容全部写出来的话,这本书估计要有2000页了(也许我还在写呢)。因此,一些本书中无法涉及到而有读者需要的内容,只好放在以下这个部分跟读者说明了。
    数据库调优和索引
    由于本书中不涉及到数据库的调优和索引,所以读者可能会发现,本书中的大多数项目都没有在数据库中建立任何索引。当我们的数据库数据量较小并且查询语句相对简单的时候,这可能并没有什么问题,但是当数据库与应用程序随着时间不断增加的时候,这就可能导致严重的性能问题。也许因为我是从数据库管理转到Web开发上来的,所以我很难将这个重要的特性从本书中移除,但是这个问题实在是很复杂,也容不得我在这上面花费过多的精力。也许将来我会再写一本完全关于这个方面的书。
    测试
    在Rails社区中,测试驱动开发(TDD,Test-driven development)显然占有一席之地。虽然我还没有先写测试的习惯,但是我很清楚在部署应用之前开发一个复杂的测试套件(Test Suit)的价值。我曾经听到有人说所有的程序都要经过测试,问题是应该由你自己来测**例还是直接将程序交给你的用户,让他们来帮你进行测试。
    重构(Refactoring)
    伴随一系列测**例而来的,便是对代码进行重构。由于每个项目还处于非常初始的演示阶段,所以留给了代码重构很大的空间,以使代码变得更干净利落,可以优化性能和减少代码量。在每个项目的练习部分中,我都会为读者指出通常进行重构和优化的正确方向。
    目录
    第1部分 必要的准备工作(请不要跳过这一部分)
    第1章 搭建开发环境 3
    1.1 安装Ruby和Rails 3
    1.1.1 在Linux上安装Ruby 4
    1.1.2 在Windows上安装Rails 4
    1.1.3 在Mac OS X上安装Rails 5
    1.2 安装数据库 6
    1.2.1 安装SQLite 7
    1.2.2 安装SQLite Ruby gem 7
    1.3 代码编辑工具 8
    1.3.1 Windows 8
    1.3.2 Linux 11
    1.3.3 Mac 11
    1.3.4 建议 13
    1.4 安装Web服务器 13
    1.4.1 WEBrick 13
    1.4.2 Mongrel 14
    1.5 *后给读者的建议 16
    1.5.1 使用版本控制系统 16
    1.5.2 使用Capistrano实现自动部署 17
    1.6 本章小结 19
    第2章 创建Rails应用程序 21
    2.1 创建步骤 21
    2.1.1 步骤1:创建项目 21
    2.1.2 步骤2:配置数据库 25
    2.1.3 步骤3:测试应用程序 26
    2.1.4 步骤4:安装样式表(Style Sheet) 27
    2.1.5 步骤5:将应用程序与Rails绑定 27
    2.2 本章小结 28
    第2部分 Monkey Tasks日常任务管理
    第3章 实现用户注册与认证管理 31
    3.1 创建页面布局 31
    3.1.1 初始化布局 32
    3.1.2 **个视图模板 35
    3.2 添加用户注册与认证管理 36
    3.2.1 配置Acts as Authenticated 39
    3.2.2 实现用户注册功能 41
    3.2.3 发送邮件通知 43
    3.3 本章小结 49
    第4章 实现日常待办事项管理 51
    4.1 创建Task模型类 51
    4.2 创建Task控制器 53
    4.3 添加任务表单 55
    4.4 更好的日期选择控件 56
    4.5 Schedule模型 59
    4.6 Todo模型 60
    4.7 实现任务列表功能 62
    4.8 实现日程表功能 64
    4.8.1 安排任务 65
    4.8.2 显示日程表 66
    4.9 使用局部模板(Partial) 68
    4.10 使用Ajax 71
    4.10.1 可排序元素 71
    4.10.2 RJS 72
    4.11 本章小结 74
    第5章 完善Monkey Tasks 77
    5.1 添加验证功能(Validation) 77
    5.2 任务修改功能 77
    5.3 添加日历(Calendar) 77
    5.4 查看以前的任务 78
    5.5 记录每个任务的预计时间 78
    5.6 显示任务完成率 78
    5.7 开发iPhone接口 79
    5.8 优化数据库查询 79
    5.9 将代码移到模型类中 80
    5.10 绑定Chronic Gem 81
    5.11 本章小结 81
    第3部分 Exercisr应用程序
    第6章 开发基于REST的应用程序 85
    6.1 基于REST的开发 85
    6.1.1 什么是REST 85
    6.1.2 REST的价值 86
    6.2 **个资源 87
    6.2.1 REST工具 87
    6.2.2 创建Exercise资源 91
    6.3 添加基于REST的认证功能 96
    6.4 改进外观显示 102
    6.5 创建新的用户 103
    6.6 完成Exercise资源 106
    6.6.1 创建模型间关联关系 106
    6.6.2 修改Exercise控制器的作用域 107
    6.6.3 运动(Exercise)视图 109
    6.7 Workout资源 112
    6.7.1 Workout模型及其关联关系 112
    6.7.2 Workout控制器 112
    6.7.3 修改视图 114
    6.8 记录锻炼过程中的数据 116
    6.8.1 创建Activity模型类及其关联关系 117
    6.8.2 修改Activity路由 119
    6.8.3 修改Activity控制器 120
    6.8.4 修改Activity视图模板 122
    6.8.5 修改Workout控制器中的show方法 124
    6.8.6 改进添加Activity的表单 125
    6.9 跟踪锻炼目标 127
    6.9.1 修改模型类 127
    6.9.2 创建嵌套路由 128
    6.9.3 配置控制器 128
    6.9.4 配置视图 132
    6.9.5 记录上一次结果 136
    6.9.6 探索REST接口 136
    6.10 本章小结 139
    第7章 为应用程序添加图形功能 141
    7.1 第二阶段开发 141
    7.2 Rails中的图表 141
    7.2.1 CSS图表 141
    7.2.2 Sparklines 144
    7.2.3 Gruff图表 147
    7.2.4 Scruffy 153
    7.2.5 Ziya 155
    7.3 本章小结 162
    第8章 完善Exercisr 163
    8.1 为接口添加RJS 163
    8.2 创建日历来显示锻炼的时间 163
    8.3 对图表进行缓存 164
    8.4 使首页也符合REST要求 164
    8.5 开发更多的图表 164
    8.6 调整模型类和控制器中的业务逻辑 164
    8.7 开发网络交流功能 165
    8.8 本章小结 165
    第4部分 简单的博客程序
    第9章 使用Typo创建博客程序 169
    9.1 Typo介绍 169
    9.1.1 Typo的特点 170
    9.1.2 安装Typo 170
    9.1.3 激活Typo Blog 171
    9.2 Rails的启动过程 173
    9.3 理解Typo 177
    9.4 Rails如何对请求进行路由 181
    9.5 确定设计方案 187
    9.6 使用Typo 188
    9.6.1 管理Blog 190
    9.6.2 添加内容 191
    9.7 定制Typo 192
    9.7.1 管理主题 192
    9.7.2 关于主题 193
    9.7.3 创建自定义主题 193
    9.7.4 创建侧边栏(Sidebar)组件 198
    9.7.5 自定义侧边栏组件 199
    9.8 本章小结 200
    第10章 创建一个简单的博客引擎(Engine) 201
    10.1 我们将创建什么样的引擎 201
    10.2 创建**组模型类 202
    10.3 创建API 205
    10.3.1 MetaWeblog服务API 207
    10.3.2 支持BloggerAPI 209
    10.3.3 支持图像 222
    10.4 创建博客的展现界面 228
    10.4.1 创建基本的布局 228
    10.4.2 修改Application控制器 230
    10.4.3 创建首页 230
    10.4.4 查看某篇日志 234
    10.5 本章小结 238
    第11章 完善博客程序 239
    11.1 开发BloggerAPI 239
    11.2 使用Mephisto来创建Blog程序 239
    11.3 定制Typo 239
    11.4 在方法中实现认证功能 240
    11.5 添加缓存(Caching) 240
    11.6 添加评论和Akismet垃圾广告过滤功能 240
    11.7 添加Web后台管理 241
    11.8 针对分类的RSS文件(Feed) 241
    11.9 实现标签(Tag)功能 241
    11.10 本章小结 242
    第5部分 使用缓存构建一个Web漫画站点
    第12章 使用页面缓存构建基本的系统 245
    12.1 基本的管理系统 246
    12.1.1 上传漫画 247
    12.1.2 Comic模型 248
    12.1.3 修改路由 251
    12.1.4 修改脚手架(Scaffolding) 252
    12.1.5 创建一个漫画 254
    12.1.6 简单的认证系统 256
    12.1.7 限制访问 258
    12.2 向公众展现漫画 259
    12.3 页面缓存 261
    12.3.1 开启缓存功能 262
    12.3.2 清除缓存 266
    12.4 本章小结 268
    第13章 实现**缓存 269
    13.1 Members控制器 270
    13.2 限制其他用户的访问 271
    13.3 缓存付费成员的页面 273
    13.4 使缓存页面过期 275
    13.5 片段缓存 276
    13.5.1 自定义布局 277
    13.5.2 清除片段缓存 282
    13.6 本章小结 282
    第14章 完善Web漫画站点 285
    14.1 添加一个博客(Blog) 285
    14.2 集成一个论坛(Forum) 285
    14.3 通过日期来选择漫画 286
    14.4 完善身份认证系统 286
    14.5 本章小结 286
    第6部分 教会社区网站
    第15章 用户和档案管理 291
    15.1 安装Restful认证 291
    15.2 我们即将要创建什么 294
    15.2.1 创建共享布局 295
    15.2.2 Avatar模型 296
    15.2.3 用户的详细信息模型 298
    15.2.4 创建示例用户 300
    15.2.5 Profile控制器 301
    15.3 修改用户的详细信息和头像 304
    15.3.1 修改档案信息 305
    15.3.2 查看档案 308
    15.4 添加博客功能 309
    15.5 在用户页面中添加博客摘要 317
    15.6 添加相册功能 319
    15.7 添加照片 321
    15.8 相册与照片控制器 323
    15.8.1 创建一个新的相册 324
    15.8.2 查看指定相册 325
    15.8.3 显示所有用户的相册 326
    15.9 本章小结 328
    第16章 完善社区站点 329
    16.1 创建社区主页 329
    16.1.1 创建默认路由 329
    16.1.2 index页面 330
    16.1.3 创建首页 334
    16.2 添加用户目录 336
    16.2.1 创建字母索引 336
    16.2.2 创建路由 337
    16.2.3 添加directory方法 337
    16.2.4 修改视图模板 338
    16.3 添加导航 339
    16.3.1 上部导航 339
    16.3.2 页脚导航 340
    16.4 添加评论 340
    16.4.1 安装acts_as_commentable插件 341
    16.4.2 显示评论 342
    16.4.3 添加评论 345
    16.5 本章小结 351
    第17章 完善教会社区应用 353
    17.1 创建用户导入或注册功能 353
    17.2 使用SWFupload批量上传照片 353
    17.3 添加好友列表功能 354
    17.4 改进主页 355
    17.5 清理部分Ruby代码 355
    17.6 将代码移到局部模板(Partial)中 355
    17.7 添加缓存功能 357
    17.8 本章小结 357
    第7部分 GamingTrend网站
    第18章 PHP网站的**问题 361
    18.1 简要介绍当前系统 362
    18.1.1 当前系统的代码 363
    18.1.2 **系统存在的问题 365
    18.2 建立我们的应用程序 366
    18.3 使用Ext-JS建立更好的界面 368
    18.3.1 Border Layout 369
    18.3.2 表格(Grid) 370
    18.3.3 对话框(Dialog) 371
    18.3.4 消息框(Message Box) 372
    18.4 在Rails应用程序中安装Ext-JS 373
    18.5 自动化Ext-JS安装 374
    18.6 本章小结 378
    第19章 转化游戏记录 379
    19.1 对数据库进行迁移转化 379
    19.2 Games表 381
    19.3 创建Game模型 385
    19.4 创建Developer和Publisher模型 387
    19.5 创建Genres模型 391
    19.6 配置路由 393
    19.7 创建控制器 393
    19.8 创建视图 396
    19.8.1 标准布局 396
    19.8.2 使用Ext Border Layout改进布局页面 399
    19.9 定义工作流(Workflow) 402
    19.9.1 显示当前资源列表 402
    19.9.2 创建一个新资源 402
    19.9.3 删除指定资源 403
    19.9.4 修改指定资源 403
    19.10 建立开发商页面 403
    19.10.1 显示开发商列表 403
    19.10.2 修改开发商记录 408
    19.10.3 改进表格 410
    19.10.4 在工具栏上增加按钮 417
    19.10.5 删除开发商记录 418
    19.10.6 新建开发商记录 421
    19.11 将工作流抽象为辅助方法 423
    19.12 创建Show/Edit模板 433
    19.13 游戏 435
    19.13.1 处理选择列表框 440
    19.13.2 提供所见即所得(WYSIWYG)功能 442
    19.14 查看游戏截图 446
    19.15 本章小结 452
    第20章 新闻管理功能 453
    20.1 修改数据库 453
    20.2 创建新闻模型 455
    20.3 创建控制器 457
    20.4 创建列表视图 458
    20.4.1 重定义index方法 458
    20.4.2 创建index视图 458
    20.4.3 修改表格 460
    20.5 捕获创建中的错误信息 471
    20.6 新闻编辑页面 472
    20.6.1 编辑新闻 472
    20.6.2 激活(Activate)邮件 474
    20.6.3 为新闻建立关联关系 476
    20.7 本章小结 483
    第21章 完善游戏网站 485
    21.1 创建自己的生成器(Generator) 485
    21.2 添加登录功能 485
    21.3 在新闻中关联发行商、开发商和游戏机型 487
    21.4 创建一个游戏机型常量 487
    21.5 增加包装图片和游戏截图的上传功能 487
    21.6 支持游戏评论 488
    21.7 支持较长内容 488
    21.8 添加Acts as Paranoid 插件 488
    21.9 将逻辑移到模型中 489
    21.10 本章小结 489
    第8部分 使用Edge Rails(Rails 2.0)集成REST应用程序
    第22章 Highrise的简要介绍 493
    22.1 注册一个Highrise账户 493
    22.2 创建联系人 495
    22.3 创建任务 496
    22.4 Highrise的更多功能 496
    22.5 本章小结 497
    第23章 集成Highrise的REST API 499
    23.1 浏览API 499
    23.2 使用REST API 501
    23.3 新建Edge Rails项目 502
    23.3.1 获得Rails的Edge版本 503
    23.3.2 创建Edge Rails应用程序 503
    23.4 测试我们的连接 505
    23.5 本章小结 507
    第24章 创建预约程序 509
    24.1 我们要创建什么样的程序 509
    24.2 设计布局草图 509
    24.2.1 安装 Ext 510
    24.2.2 使用Yahoo地图 510
    24.2.3 获取应用程序ID 511
    24.2.4 布局脚本 511
    24.3 Home控制器 512
    24.4 添加任务列表 516
    24.5 显示待办任务 518
    24.5.1 创建变量 519
    24.5.2 建立数据源 520
    24.5.3 在地图上显示客户 525
    24.6 管理备忘记录(Notes) 527
    24.6.1 显示备忘信息 528
    24.6.2 添加备忘信息 528
    24.6.3 使用AJAX更新备忘信息 529
    24.7 本章小结 531
    第25章 完善Rails 2.0应用程序 533
    25.1 改进Highrise项目 533
    25.1.1 缓存客户数据 533
    25.1.2 创建约会 533
    25.1.3 修改客户信息 534
    25.2 Edge Rails 2.0的新特性 534
    25.2.1 Sexy Migrations 534
    25.2.2 自动生成迁移代码 534
    25.2.3 数据库命令 535
    25.2.4 查看路由 535
    25.2.5 查询缓存 535
    25.2.6 改善REST风格的路由 536
    25.2.7 从框架中移除的功能 536
    25.3 本章小结 537
    ……

    与描述相符

    100

    北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 台湾 香港 澳门 海外