怎么样来更好的学习Python前后端通信连接知识

当前位置:&&&&&&
前端工程师需要前后端都会吗
前端是指浏览器端的编程,后端当然就是server端的前端技术包括html/css/javascript,当然对于程序员而言,javascript占更大的比重,有一部分“前端”任务由页面制作人员完成,也就是切分网页结构,定义css等等,程序员所负责的前端主要是完成用户人机交互界面,调用数据接口,渲染页面,完成业务逻辑等等前端程序员当然需要懂一些后端的知识,程序员从来不应该是偏门的,这个也符合木桶理论,一个短板过短,其他的长板再长也存不住更多的水,所以对前端的使用到了一定程度,如果没有一些后端的知识,很难有深入的理解。而且前端仅限于js的水平就太low了,这是一个综合能力(比如http协议,http server的配置优化)。当然样样精通不是一两年能达到的,站的位置决定眼光,也更容易知道自己的界限在什么地方,这是初学者需要突破的,否则对于开发来说就不是享受,而是在辛苦的挣扎。后端更多关注的是架构、效率、稳定、负载,客观一点说后端的工作的含金量应该更高一些,因为如何保证一个架构有良好的扩展性并承载高负载是互联网应用(不论是网站还是应用还是在线游戏)的一个永恒的主题,而前端的技术千变万化也只是树干的枝杈延伸,而触及不了树根的问题(当然不是说用户体验不重要)。不过做后端的同学压力也会比较大,半夜被电话叫起来修bug的几率是大大的。。目前探讨前端当然是比较时髦的话题了,不过万变不离其宗,要成为优秀的开发人员提高综合素质是必须的。学习java或其他语言对于是windows还是linux其实没有区别,因为关注的是语言本身,基本各种语言都是有win和linux版本的。但是如果涉及部署架构等问题,学习linux类的操作系统也是必须的。(入一台Mac电脑对于开发人员其实是很不错的选择,不过建议内存至少有8G)关于seo的问题,我个人认为如果能遵照各个开发环节所提倡的规范去做,实际上就已经把seo的工作做了一大半了,这个seo问题我觉得不是开发过程中首要考虑的。thinking in java这种书还是在阐明java 语言的基本概念,和实际的J2EE开发还是有很远的距离的,当然这也是学习java的不能略过的过程,这个就要靠时间的积累了。不过我已经很少看书了,除非接触一个全新的知识,否则只看文档就够了,这些计算机书籍,实用性比较强的还是oreilly的cookbook系列,从实例入手永远比看一大段文字有效。另外不太推荐java,我觉得java用来开发web应用,过于沉重了,php/python/ruby on rail/nodejs等语言更现代,也更容易进入实际的开发流程,而且也有很广泛的用途。
&&上一篇:下一篇:&&
业务咨询:
招聘热线:028-
传真:028-
地址:成都市人民南路四段成科西路三号省计算机应用研究中心B栋一楼
欢迎PR>=5的网站与我们交换友情链接(网站制作、网站建设类网络公司站点,联系QQ:)
(C) 四川方法数码科技有限公司
四川方法创享科技有限公司
成公网备字第[]号
蜀ICP备号 川B2-
川公网安备 25号python和openstack有多牛才能进云计算公司?
之前参与公司面试和出部分校招题,谈谈个人看法吧,这里我格外强调个人看法,因为这确实就是我的个人看法,不代表所有人,更不代表我公司。说实话,在公司校招的这个问题上还产生过争议。
关于编程语言问题,其实我觉得编程能力和解决问题能力更重要。OpenStack是基于Python语言实现的没错,掌握Python是作为OpenStack开发的基本功。但Python需要掌握到什么程度呢?我个人并不认同死抠语法(诸如空字符串、空列表、"False"、[False]...,转化成bool类型哪个是True,哪个是False),掌握基本的语法、熟悉debug以及常用的Python库就够了。OpenStack连lambda表达式其实都很少用,相对高级的语法也就装饰器、反射机制了。编程语言大多是共通的,如果熟悉C、Java,转向Python并不需要花很多的学习精力,仅仅需要一个适应的过程而已。相对编程语言本身,我认为算法能力、数据结构、建模能力、设计模式、编程艺术、代码规范更重要,花费大量时间在抠语法上,不如多学点方法论。当然为了考察Python的基础,也会问几个Python的相关问题(本人随意列举,与实际面试无关),比如:
Python是否支持重载?
Python的属性和方法是否支持权限访问控制?
Python是否支持运算符重载?
range和xrange区别是什么(何谓生成器)?
关于第二个问题,OpenStack需要达到什么样的水平?这个没有绝对的评判标准。因为OpenStack不仅包含一个庞大的项目集(计算服务Nova、块存储服务Cinder、对象存储Swift、编排服务Heat、裸机服务Ironic、容器编排服务Magnum...),还涵盖了庞大的技术生态(数据中心、运维、高可用、虚拟化技术、存储、网络技术...),要想精通OpenStack的所有方方面面,难度较大。所以,首先得明确你想要做什么,才好有针对性的学习什么,而不是胡子眉毛一把抓。
当然从事OpenStack相关的任何工作,对OpenStack的基本感性认识是必须的,不可能精通每个项目,但至少得熟悉OpenStack的几个核心项目(Keystone、Glance、Nova、Cinder、Neutron、Swift),知道它们都是干嘛的,包含哪些服务,各个服务是什么作用,服务之间是如何通信的,最好能理清各个服务的数据流。下面针对不同工作进一步细分:
OpenStack开发:主要参与社区开发或者内部patch。除了以上提到的Python语法,还需要掌握OpenStack项目的代码结构,可参考int32bit/openstack-workflow。追踪焦点项目的社区开发进度和新特性,参与社区讨论并贡献代码。打开一个模块的一个方法,需要快速地定位是在哪个组件运行的(nova-api?nova-conductor?nova-compute?)。OpenStack的项目结构还是相对统一的,掌握了一个项目,其它项目的骨骼也就基本清晰了。以上是OpenStack开发的通识基础。当然如果你对Nova感兴趣,则还需要对Nova的架构和原理非常熟悉,掌握调度算法和常用的filters,熟悉libvirt以及虚拟化技术。如果研究Cinder,Cinder通常都会使用Ceph作为存储后端,因此通常还需要学习Ceph的知识,Cinder如何支持多存储后端?为什么cinder-volume不支持AA高可用模式。而如果是Neutron的话,其实更多的知识是网络技术,对ovs的熟悉是必要的。其它的高级服务,比如Sahara,当然还需要对Hadoop/Spark有一定的了解,尤其是CDH的部署,而Magnum则需要对K8S以及Swarm有一定的了解。
OpenStack运维: OpenStack的实现原理、架构,熟悉OpenStack的API。还有一些传统运维相关的技能,如排错、数据库调优、网络故障、服务监控等。
OpenStack部署实施: OpenStack的部署架构、配置优化,通用技术如网络规划和配置、自动化部署(如Puppet、Ansible)等。
架构师:OpenStack服务和组件原理、高可用技术、故障恢复、异地容灾等。
OpenStack测试:测试是所有项目都必须的,并不是OpenStack所特有的,测试方法和场景也类似,包括功能测试和验证(PoC验证)、集成测试、性能和压力测试等,测试方法如monkey测试、冒烟测试等。OpenStack测试相关的项目如Tempest、Rally。
OpenStack产品设计:熟悉OpenStack所包含实体的概念以及作用,比如server、volume、flavor、stack等。熟悉OpenStack的API。其它产品设计的通用技术,比如UI设计、用户体验和交互、前端技术等。
OpenStack方案、售前、售后:对整个OpenStack生态有基本认识,OpenStack有什么优势,市场情况如何,前沿技术调研,与别家产品有什么差别等等。
以上是针对OpenStack直接相关的,还有与OpenStack生态相关的技术,如存储相关技术(分布式存储原理、数据一致性、对Ceph有研究等)、网络相关的SDN技术等。除了以上的硬实力,其它的诸如心理素质、沟通能力、学习能力以及对技术热爱、开源社区贡献、对前沿技术敏感等也是十分有用的。
新手的话,建议从手动部署开始,推荐按照官方文档一步一步执行Ocata Installation Tutorials and Guides,安装文档还包含对各个服务的功能介绍,这是非常不错的入门学习资源,最好能够从头到尾过一遍,顺便还能熟悉OpenStack的CLI。安装完成后,好好折腾折腾,先把OpenStack玩溜。
一份Python爬虫电子书?
Openstack入门到精通视频教程下载?
微信工作号关注【英拓网络】,回复【1】;即可获得资源!
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点您的位置: >>
  前后端分离已经是业界所共识的一种开发/部署模式了。所谓的前后端分离,并不是传统行业中的按部门划分,一部分人纯做前端(HTML/CSS/JavaScript/Flex),另一部分人纯做后端,因为这种方式是不工作的:比如很多团队采取了后端的模板技术(JSP, FreeMarker, ERB等等),前端的开发和调试需要一个后台Web容器的支持,从而无法做到真正的分离(更不用提在部署的时候,由于动态内容和静态内容混在一起,当设计动态静态分流的时候,处理起来非常麻烦)。关于前后端开发的另一个讨论可以。
  即使通过API来解耦前端和后端开发过程,前后端通过RESTFul的接口来通信,前端的静态内容和后端的动态计算分别开发,分别部署,集成仍然是一个绕不开的问题 & 前端/后端的应用都可以独立的运行,但是集成起来却不工作。我们需要花费大量的精力来调试,直到上线前仍然没有人有信心所有的接口都是工作的。
  一点背景
  一个典型的Web应用的布局看起来是这样的:
  前后端都各自有自己的开发流程,构建工具,测试集合等等。前后端仅仅通过接口来编程,这个接口可能是JSON格式的RESTFul的接口,也可能是XML的,重点是后台只负责数据的提供和计算,而完全不处理展现。而前端则负责拿到数据,组织数据并展现的工作。这样结构清晰,关注点分离,前后端会变得相对独立并松耦合。
  上述的场景还是比较理想,我们事实上在实际环境中会有非常复杂的场景,比如异构的网络,异构的操作系统等等:
  在实际的场景中,后端可能还会更复杂,比如用C语言做数据采集,然后通过Java整合到一个数据仓库,然后该数据仓库又有一层Web Service,最后若干个这样的Web Service又被一个Ruby的聚合Service整合在一起返回给前端。在这样一个复杂的系统中,后台任意端点的失败都可能阻塞前端的开发流程,因此我们会采用mock的方式来解决这个问题:
  这个mock服务器可以启动一个简单的HTTP服务器,然后将一些静态的内容serve出来,以供前端代码使用。这样的好处很多:
前后端开发相对独立
后端的进度不会影响前端开发
启动速度更快
前后端都可以使用自己熟悉的技术栈(让前端的学maven,让后端的用gulp都会很不顺手)
  但是当集成依然是一个令人头疼的难题。我们往往在集成的时候才发现,本来协商的数据结构变了:deliveryAddress字段本来是一个字符串,现在变成数组了(业务发生了变更,系统现在可以支持多个快递地址);price字段变成字符串,协商的时候是number;用户邮箱地址多了一个层级等等。这些变动在所难免,而且时有发生,这会花费大量的调试时间和集成时间,更别提修改之后的回归测试了。
  所以仅仅使用一个静态服务器,然后提供mock数据是远远不够的。我们需要的mock应该还能做到:
前端依赖指定格式的mock数据来进行UI开发
前端的开发和测试都基于这些mock数据
后端产生指定格式的mock数据
后端需要测试来确保生成的mock数据正是前端需要的
  简而言之,我们需要商定一些契约,并将这些契约作为可以被测试的中间格式。然后前后端都需要有测试来使用这些契约。一旦契约发生变化,则另一方的测试会失败,这样就会驱动双方协商,并降低集成时的浪费。
  一个实际的场景是:前端发现已有的某个契约中,缺少了一个address的字段,于是就在契约中添加了该字段。然后在UI上将这个字段正确的展现了(当然还设置了字体,字号,颜色等等)。但是后台生成该契约的服务并没有感知到这一变化,当运行生成契约部分测试(后台)时,测试会失败了 & 因为它并没有生成这个字段。于是后端工程师就找前端来商量,了解业务逻辑之后,他会修改代码,并保证测试通过。这样,当集成的时候,就不会出现UI上少了一个字段,但是谁也不知道是前端问题,后端问题,还是数据库问题等。
  而且实际的项目中,往往都是多个页面,多个API,多个版本,多个团队同时进行开发,这样的契约会降低非常多的调试时间,使得集成相对平滑。
  在实践中,契约可以定义为一个JSON文件,或者一个XML的payload。只需要保证前后端共享同一个契约集合来做测试,那么集成工作就会从中受益。一个最简单的形式是:提供一些静态的mock文件,而前端所有发往后台的请求都被某种机制拦截,并转换成对该静态资源的请求。
,基于Java
,基于Java
,基于Ruby
  看到sinatra被列在这里,可能熟悉Ruby的人会反对:它可是一个后端全功能的的程序库啊。之所以列它在这里,是因为sinatra提供了一套简洁优美的DSL,这个DSL非常契合Web语言,我找不到更漂亮的方式来使得这个mock server更加易读,所以就采用了它。
  一个例子
  我们以这个应用为示例,来说明如何在前后端分离之后,保证代码的质量,并降低集成的成本。这个应用场景很简单:所有人都可以看到一个条目列表,每个登陆用户都可以选择自己喜欢的条目,并为之加星。加星之后的条目会保存到用户自己的个人中心中。用户界面看起来是这样的:
  不过为了专注在我们的中心上,我去掉了诸如登陆,个人中心之类的页面,假设你是一个已登录用户,然后我们来看看如何编写测试。
  前端开发
  根据通常的做法,前后端分离之后,我们很容易mock一些数据来自己测试:
"url": "/2015/03/list-comprehension-in-python/",
"title": "Python中的 list comprehension 以及 generator",
"publicDate": "日"
"url": "/2015/03/build-monitor-script-based-on-inotify/",
"title": "使用inotify/fswatch构建自动监控脚本",
"publicDate": "日"
"url": "/2015/02/build-sample-application-by-using-underscore-and-jquery/",
"title": "使用underscore.js构建前端应用",
"publicDate": "日"
  然后,一个可能的方式是通过请求这个json来测试前台:
$(function() {
$.get('/mocks/feeds.json').then(function(feeds) {
var feedList = new Backbone.Collection(extended);
var feedListView = new FeedListView(feedList);
$('.container').append(feedListView.render());
  这样当然是可以工作的,但是这里发送请求的url并不是最终的,当集成的时候我们又需要修改为真实的url。一个简单的做法是使用Sinatra来做一次url的转换:
get '/api/feeds' do
content_type 'application/json'
File.open('mocks/feeds.json').read
  这样,当我们和实际的服务进行集成时,只需要连接到那个服务器就可以了。
  注意,我们现在的核心是mocks/feeds.json这个文件。这个文件现在的角色就是一个契约,至少对于前端来说是这样的。紧接着,我们的应用需要渲染加星的功能,这就需要另外一个契约:找出当前用户加星过的所有条目,因此我们加入了一个新的契约:
"url": "/2015/02/build-sample-application-by-using-underscore-and-jquery/",
"title": "使用underscore.js构建前端应用",
"publicDate": "日"
  然后在sinatra中加入一个新的映射:
get '/api/fav-feeds/:id' do
content_type 'application/json'
File.open('mocks/fav-feeds.json').read
  通过这两个请求,我们会得到两个列表,然后根据这两个列表的交集来绘制出所有的星号的状态(有的是空心,有的是实心):
$.when(feeds, favorite).then(function(feeds, favorite) {
var ids = _.pluck(favorite[0], 'id');
var extended = _.map(feeds[0], function(feed) {
return _.extend(feed, {status: _.includes(ids, feed.id)});
var feedList = new Backbone.Collection(extended);
var feedListView = new FeedListView(feedList);
$('.container').append(feedListView.render());
  剩下的一个问题是当点击红心时,我们需要发请求给后端,然后更新红心的状态:
toggleFavorite: function(event) {
event.preventDefault();
var that =
$.post('/api/feeds/'+this.model.get('id')).done(function(){
var status = that.model.get('status');
that.model.set('status', !status);
  这里又多出来一个请求,不过使用Sinatra我们还是可以很容易的支持它:
post '/api/feeds/:id' do
  可以看到,在没有后端的情况下,我们一切都进展顺利 & 后端甚至还没有开始做,或者正在由一个进度比我们慢的团队在开发,不过无所谓,他们不会影响我们的。
  不仅如此,当我们写完前端的代码之后,可以做一个End2End的测试。由于使用了mock数据,免去了数据库和网络的耗时,这个End2End的测试会运行的非常快,并且它确实起到了端到端的作用。这些测试在最后的集成时,还可以用来当UI测试来运行。所谓一举多得。
#encoding: utf-8
require 'spec_helper'
describe 'Feeds List Page' do
let(:list_page) {FeedListPage.new}
list_page.load
it 'user can see a banner and some feeds' do
expect(list_page).to have_banner
expect(list_page).to have_feeds
it 'user can see 3 feeds in the list' do
expect(list_page.all_feeds).to have_feed_items count: 3
it 'feed has some detail information' do
first = list_page.all_feeds.feed_items.first
expect(first.title).to eql("Python中的 list comprehension 以及 generator")
  关于如何编写这样的测试,可以参考之前写的。
  后端开发
  我在这个示例中,后端采用了spring-boot作为示例,你应该可以很容易将类似的思路应用到Ruby或者其他语言上。
  首先是请求的入口,FeedsController会负责解析请求路径,查数据库,最后返回JSON格式的数据。
@Controller
@RequestMapping("/api")
public class FeedsController {
@Autowired
private FeedsService feedsS
@Autowired
private UserService userS
public void setFeedsService(FeedsService feedsService) {
this.feedsService = feedsS
public void setUserService(UserService userService) {
this.userService = userS
@RequestMapping(value="/feeds", method = RequestMethod.GET)
@ResponseBody
public Iterable&Feed& allFeeds() {
return feedsService.allFeeds();
@RequestMapping(value="/fav-feeds/{userId}", method = RequestMethod.GET)
@ResponseBody
public Iterable&Feed& favFeeds(@PathVariable("userId") Long userId) {
return userService.favoriteFeeds(userId);
  具体查询的细节我们就不做讨论了,感兴趣的可以在文章结尾处找到代码库的链接。那么有了这个Controller之后,我们如何测试它呢?或者说,如何让契约变得实际可用呢?
  sprint-test提供了非常优美的DSL来编写测试,我们仅需要一点代码就可以将契约用起来,并实际的监督接口的修改:
private MockMvc mockM
private FeedsService feedsS
private UserService userS
public void setup() {
feedsService = mock(FeedsService.class);
userService = mock(UserService.class);
FeedsController feedsController = new FeedsController();
feedsController.setFeedsService(feedsService);
feedsController.setUserService(userService);
mockMvc = standaloneSetup(feedsController).build();
  建立了mockmvc之后,我们就可以编写Controller的单元测试了:
public void shouldResponseWithAllFeeds() throws Exception {
when(feedsService.allFeeds()).thenReturn(Arrays.asList(prepareFeeds()));
mockMvc.perform(get("/api/feeds"))
.andExpect(status().isOk())
.andExpect(content().contentType("application/charset=UTF-8"))
.andExpect(jsonPath("$", hasSize(3)))
.andExpect(jsonPath("$[0].publishDate", is(notNullValue())));
  当发送GET请求到/api/feeds上之后,我们期望返回状态是200,然后内容是application/json。然后我们预期返回的结果是一个长度为3的数组,然后数组中的第一个元素的publishDate字段不为空。
  注意此处的prepareFeeds方法,事实上它会去加载mocks/feeds.json文件 & 也就是前端用来测试的mock文件:
private Feed[] prepareFeeds() throws IOException {
URL resource = getClass().getResource("/mocks/feeds.json");
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(resource, Feed[].class);
  这样,当后端修改Feed定义(添加/删除/修改字段),或者修改了mock数据等,都会导致测试失败;而前端修改mock之后,也会导致测试失败 & 不要惧怕失败 & 这样的失败会促进一次协商,并驱动出最终的service的契约。
  对应的,测试/api/fav-feeds/{userId}的方式类似:
public void shouldResponseWithUsersFavoriteFeeds() throws Exception {
when(userService.favoriteFeeds(any(Long.class)))
.thenReturn(Arrays.asList(prepareFavoriteFeeds()));
mockMvc.perform(get("/api/fav-feeds/1"))
.andExpect(status().isOk())
.andExpect(content().contentType("application/charset=UTF-8"))
.andExpect(jsonPath("$", hasSize(1)))
.andExpect(jsonPath("$[0].title", is("使用underscore.js构建前端应用")))
.andExpect(jsonPath("$[0].publishDate", is(notNullValue())));
  前后端分离是一件容易的事情,而且团队可能在短期可以看到很多好处,但是如果不认真处理集成的问题,分离反而可能会带来更长的集成时间。通过面向契约的方式来组织各自的测试,可以带来很多的好处:更快速的End2End测试,更平滑的集成,更安全的分离开发等等。
  前后端的代码我都放到了Gitbub上,感兴趣的可以clone下来自行研究:
Web前端热门文章
Web前端最新文章学前端也必须学Python,要懂后端!!!_前端吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:55,160贴子:
学前端也必须学Python,要懂后端!!!收藏
做开发能有将近8年,下面说下我的看法下面我简单说一下如今想做web前端的人应该要具备哪些修养去学习。第一:在如今这个前端的市场下,你如果太过于着急找工作而去学习,你一定找不到,有一个很简单的道理,任何东西求快没有用,首先你要会,学的成了半吊子,看点视频就去找工作,没人接收。第二:如果没有一套系统的学习路线和方案,这看看,那里看看,依旧学了之后还是浪费时间,根据我的学习经历来看,任何人学习任何东西,需要一气呵成,在这段时间内,学习什么就一刻都不能松懈,今天看点视频,明天有事,不看了,这样没啥意义。第三:在如今这个IT市场,不建议任何人去线下培训四个月,就目前来看四个月的时间培训出来的新手,大多数都很难找工作,而且依赖老师和环境很严重,在塑造工作经验这块不太成功,导致四个月培训后,会逐渐的忘记之前学的东西,形成脱节的情况。第四:如果你在学习中没有很多的代码量的话,不多去做案例的话,我个人觉得学了跟没学一样,第二次你见到它可能还是不认识它。最好是有个问的人,一个外行想通过自学前端开发区找工作,太难了,尤其是在这个行情中。这是我的web前端新手群: 有兴趣的人可以加下,群里很多都在学习前端的路上,有什么行业问题都可以跟我沟通,做这行也将近8年了,对于这个行业还算很了解,群里也会分享学习视频,不定期更新。下面我说下我觉得学习前端应该的学习路线:1、HTML+CSS的静态布局,我好想没有见过几个人学不会这个,很简单,主要差别在于同一个页面,每个人用的时间不同而已,熟练就好。2. JavaScript的学习,不用说想必大家应该清楚JavaScript的重要性,前端的重中之重,没有之一,JavaScript似乎学太明白的人很少,这个跟锻炼思维逻辑有关系。有人说在网上粘贴复制就可以了,会不会是一回事,永远的粘贴复制,永远都不会。3. jQuery的学习,其实jQuery要容易一些,不过不要认为有了jQuery就忽略了JavaScript,大型互联网公司都是直接用JavaScript写的,这样的安全性要更加的高。看这个人对自己的标准是怎么样的。4. HTML5+CSS3 的学习,不要认为HTML5只是添加了一些标签而已,如果有兴趣可以去百度看看HTML5的强大之处,很多的特效用CSS3都可以做。5. Bootstrap框架的学习,这个框架应该每个东西都会用,难度不大,必须掌握。6. Node.js – react – angular.js—backbone 其实这些东西如果你JavaScript理解的一般,学起来会困难一些,不过前端框架更新的还算很快。我个人觉得把JavaScript学好其实上面都够了。
无锡前端开发就选NIIT,4-5个月培训,入职500强公司,学习期间零学费,先就业后付款,入职年薪6-15万!免费推荐就业!欢迎在线咨询申请免费7天试学.
前端交流群 个人群
你这个图片很low
登录百度帐号推荐应用}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信