SSH个人相册_ssh开发相册-程序员宅基地

技术标签: ssh  

SSH个人相册

使用Maven环境下创建album相册管理

pom中找不到oracle数据库驱动问题

Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0

原因:Oracle的ojdbc.jar是收费的,所以maven的中央仓库中没有这个资源,只能通过配置本地库才能加载到项目中去。

废话不多说,解决方案如下:

1.首先确定你是否有安装oracle,如果有安装的话,找到ojdbc6.jar包

D:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar(这是我路径,你们的可能与我不同)

2.将ojdbc6.jar包添加到maven,也就是运行下面的语句,注意:不是在C盘下运行,是在该目录下执行下面的语句,如果你不知道你的版本号,可以执行select * from v$version;进行查看

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar -Dfile=ojdbc6.jar

img

安装成功

3.最后找到项目的pom.xml引入如下代码,右击项目名称,找到maven,找到update project更新下就ok了

com.oracle ojdbc6 11.2.0.1.0

作者:viktoria
来源:CSDN
原文:https://blog.csdn.net/viktoria/article/details/77503266/
版权声明:本文为博主原创文章,转载请附上博文链接!

关于在eclipse中web.xml找不到配置文件解决方案

eclipse中基于maven构建的web项目pom.xml中指定的jar包无法发布到tomcat中

1、点击项目然后右键proto

2.在文本框中输入Deployment Assembly 然后点击 add 找到 Java Build Path Entries

3.选择 Maven Dependencies即可

关于ssh整合中遇到找不到action或者是路径不对问题

注意:action即控制器中的方法必须是公开的

1.首先检查路径是否有误

2.检查是否开启动态调用 和 开启白名单

<constant name="struts.enable.DynamicMethodInvocation" value="true"/> 
 		<!-- 设置白名单 -->
		<global-allowed-methods>regex:.*</global-allowed-methods>  

3.如果以上还是出错,检查一下web.xml的struts2的中央控制器

4.如果以上还是出错,那么检查一下你的action中方法必须给public公开的

5.最后还是解决不了,就重新换一下jar包 依赖 可能是依赖冲突

关于js中使用submit会出现两次提交的形式

在from表单中input类型为submit,而提交方式为点击按钮使用ajax方式提交,会出现两次请求后台的情况

即出现表单提交 但是页面没有跳转成功,即出现两次请求后台的信息

解决方法,使用ajax提交时 input提交方式改为button方式,

 //注册
		  $("#registerForm").submit(function(){
		     if(checkuserName() && checkpassword() && checkemail()){  
				 addUserInfo_Ajax();
				 return true;
			 }/* else{
				 return false;
			 }   */
		 })

因为ajax是异步的,当在运行ajax的代码时候,此时程序提交了submit而没有进行进入ajax中,所以会在地址栏后面加上属性

因为使用submit提交方式

##关于sql多条件group by

select ai.albumId,ai.albumName,ai.albumCover,ai.albumDate,count(pi.photoId) as ct 
    from AlbumInfo ai left join PhotoInfo  pi on ai.albumId=pi.albumId 
     group by ai.albumId,ai.albumName,ai.albumCover,ai.albumDate

在hibernate如何使用呢?

一种使用构造函数的方法,即投影查询投影查询有三种方式:

1.直接查

2.查询返回对象

3.查询返回Map键值对

这里使用Map键值对查询

注意:使用键值对必须使用给其要列名创建别名

##关于上传图片 预览图片中遇到的坑?

1558343482038
在这里插入图片描述

<script type="text/javascript">
	function doFileChange(fileElm){
		var reader = new FileReader();//文件读取器
		reader.onload=function(e){    //文件加载
			$("#photoPreview").append("<img src='"+e.target.result+"'/>");
			
			
		}
		
		for(var i=0;i<fileElm.files.length;i++){
			reader.readAsDataURL(fileElm.files[i]);
			
		}
	
	}
</script>

当你添加多个图片的时候,则会在前台控制器报错

1558343570862
在这里插入图片描述
​ 即当前的程序正在读取图片,是什么原因呢?原因是当你第一张图片还没有reader.readAsDataURL(fileElm.files[i]);又在读取第二张图片

解决方法:使用回调函数:递归方法来执行

<script type="text/javascript">
	function doFileChange(fileElm){
    
		var reader = new FileReader();//文件读取器
		var index = 0; //声明第一张图片
		reader.onload=function(e){
        //文件加载
			$("#photoPreview").append("<img src='"+e.target.result+"'/>");
			
			console.log(index);
			index++;//自身加一
			if(index<fileElm.files.length){
    //判断是否还有图片
				reader.readAsDataURL(fileElm.files[index]);//读取第二张 第三张。。。
			}
		}
		reader.readAsDataURL(fileElm.files[index]);//读取第一张图片
	}
</script>
用插件实现预览图片 这里插件引用的时lrz

就不用考虑线程阻塞问题

<script src="${pageContext.request.contextPath }/js/jquery-3.3.1.js"></script>
<script src="${pageContext.request.contextPath }/js/lrz/lrz.bundle.js"></script>
<script type="text/javascript">
		function doFileChange(fileElm){
			for(var i=0;i<fileElm.files.length;i++){
				lrz(fileElm.files[i],{width:900}).then(function(reslutObj){//对图片进行压缩
					$("#photoPreview").append("<img src='"+reslutObj.base64+"'/>");
				})
			}
			
		}


//这里仅仅是显示图片,对图片没有压缩
	/* function doFileChange(fileElm){
		var reader = new FileReader();//文件读取器
		var index = 0; //声明第一张图片
		$("#imgTip").show();
		reader.onload=function(e){    //文件加载
			$("#photoPreview").append("<img src='"+e.target.result+"'/>");
			
			console.log(index);
			index++;//自身加一
			if(index<fileElm.files.length){//判断是否还有图片
				reader.readAsDataURL(fileElm.files[index]);//读取第二张 第三张。。。
			}else{
				$("#imgTip").hide();
			}
		}
		reader.readAsDataURL(fileElm.files[index]);//读取第一张图片
	} */
</script>

关于图片垂直居中的方法

<div class="photoList">
		<s:iterator value="#request.photoList" var="pi">
			<section>
				<span><span> <img src="${rt }/${pi.photoUrl}">
				<label>文字说明</label>
			</section>
		</s:iterator>
	</div>

在图片旁边多加一个span标签;用的原理是 图片与文字垂直居中的方法

css样式的写法

	.photoList section img{
		max-height: 100%;max-width: 100%;
		vertical-align: middle;
	}
	.photoList section span{
		vertical-align: middle;height: 100%;display: inline-block;  <!--处理图片垂直居中的方法-->
	}

pom.xml文件配置的内容

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.bdqn.album.sys</groupId>
  <artifactId>album</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>album Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
   <!-- servlet的依赖 -->
   <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
		<!-- junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/antlr/antlr -->
		<dependency>
			<groupId>antlr</groupId>
			<artifactId>antlr</artifactId>
			<version>2.7.7</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/aopalliance/aopalliance -->
		<dependency>
			<groupId>aopalliance</groupId>
			<artifactId>aopalliance</artifactId>
			<version>1.0</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.ow2.asm/asm -->
<!-- 		<dependency>
			<groupId>org.ow2.asm</groupId>
			<artifactId>asm</artifactId>
			<version>5.2</version>
		</dependency> -->
		<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.6.8</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.fasterxml/classmate -->
		<dependency>
			<groupId>com.fasterxml</groupId>
			<artifactId>classmate</artifactId>
			<version>1.3.0</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/commons-pool/commons-pool -->
		<dependency>
			<groupId>commons-pool</groupId>
			<artifactId>commons-pool</artifactId>
			<version>1.5.3</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.3</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.5</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.6</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
		<dependency>
			<groupId>dom4j</groupId>
			<artifactId>dom4j</artifactId>
			<version>1.6.1</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
		<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>2.3.26-incubating</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.geronimo.specs/geronimo-jta_1.1_spec -->
		<dependency>
			<groupId>org.apache.geronimo.specs</groupId>
			<artifactId>geronimo-jta_1.1_spec</artifactId>
			<version>1.1.1</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.hibernate.common/hibernate-commons-annotations -->
		<dependency>
			<groupId>org.hibernate.common</groupId>
			<artifactId>hibernate-commons-annotations</artifactId>
			<version>5.0.1.Final</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>5.1.4.Final</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.1-api -->
		<dependency>
			<groupId>org.hibernate.javax.persistence</groupId>
			<artifactId>hibernate-jpa-2.1-api</artifactId>
			<version>1.0.0.Final</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.jboss/jandex -->
		<dependency>
			<groupId>org.jboss</groupId>
			<artifactId>jandex</artifactId>
			<version>2.0.3.Final</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.javassist/javassist -->
		<dependency>
			<groupId>org.javassist</groupId>
			<artifactId>javassist</artifactId>
			<version>3.20.0-GA</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.jboss.logging/jboss-logging -->
		<dependency>
			<groupId>org.jboss.logging</groupId>
			<artifactId>jboss-logging</artifactId>
			<version>3.3.0.Final</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-api</artifactId>
			<version>2.10.0</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/ognl/ognl -->
		<dependency>
			<groupId>ognl</groupId>
			<artifactId>ognl</artifactId>
			<version>3.1.15</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>4.2.0.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>4.2.0.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.2.0.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>4.2.0.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-expression -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>4.2.0.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.2.0.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>4.2.0.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>4.2.0.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>4.2.0.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-core</artifactId>
			<version>2.5.16</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-json-plugin -->
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-json-plugin</artifactId>
			<version>2.5.16</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-spring-plugin -->
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-spring-plugin</artifactId>
			<version>2.5.16</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-all -->
		<dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-all</artifactId>
			<version>1.3.2</version>
		</dependency>
		<dependency>
			<groupId>com.oracle</groupId>
			<artifactId>ojdbc5</artifactId>
			<version>11.2.0.1.0</version>
		</dependency>
		<!-- action注解 -->
		<dependency>
		    <groupId>org.apache.struts</groupId>
		    <artifactId>struts2-convention-plugin</artifactId>
		    <version>2.5.16</version>
		</dependency>
	
		
  </dependencies>
  <build>
    <finalName>album</finalName>
    <plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.5.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			</plugins>
  </build>
</project>

下载路径
https://download.csdn.net/download/weixin_42736725/11190361

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42736725/article/details/90383739

智能推荐

为什么 Spring 的构造器注入不需要 @Autowired 注解?_构造器注入不用加注解-程序员宅基地

文章浏览阅读980次,点赞2次,收藏3次。在讨论这个问题之前,我们可以先来回忆一下Spring的依赖注入的三种方式。分别是——这种方式是最常用的,我们可以使用或者是进行注入使用方式是最简单,但是也是最不推荐的!要使用也是推荐使用!1、不允许声明不可变域,也就是无法对属性进行 final 修饰。2、容易违反单一职责设计原则,举个例子,一个类使用10个以上的@Autowired,代码看起来并无异常,但一个有10个参数的构造函数,已经违反了一个良好的代码规范,从而考虑是否应该优化该类的使用职责。_构造器注入不用加注解

Spring,SpringBoot如何做组件的扫描_spring和springboot是如何扫描组件的-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏4次。Spring,SpringBoot如何做组件的扫描文章目录Spring,SpringBoot如何做组件的扫描引言Spring扫描假设分析在哪里怎么扫SpringBoot扫描思想体现点扫描相关分析实现很久没有提笔写博客了,手都生疏了,最近有朋友遇到疑惑问我,Spring,SpringBoot是如何做的扫描工作的,在给他解答之后,决定动手写一篇博客说明。引言大家想想spring中是如何做的声明..._spring和springboot是如何扫描组件的

二维DP问题-程序员宅基地

文章浏览阅读2.5k次。文章目录前言小技巧例题 1方法一 求组合数方法二 动态规划例题 2方法一 dp例题 3方法一 dp前言我们经常会碰到二维DP问题,比如给你一张地图(一般是二维矩阵),让你计算出从地图的左上端走到右下端的路径有多少条 / 最短的路径之和,这种问题一般会被限制运动的空间(至少我现在所碰到的题目),一般是只能向下和向右移动。我对dp问题理解不深,对于二维dp问题我的理解就是找出最优子结构(递推方程)之后,用一个二维数组来保存历史状态就能解决问题了小技巧一般这种问题很容易被矩阵上边和左边这两条bounda_二维dp

一文搞懂嵌入式CAN总线-程序员宅基地

文章浏览阅读770次。嵌入式的工程师一般都知道CAN总线广泛应用到汽车中,其实船舰电子设备通信也广泛使用CAN,随着国家对海防的越来越重视,对CAN的需求也会越来越大。CAN(Controller Area Network)即控制器局域网,是一种能够实现分布式实时控制的串行通信网络。想到CAN就要想到德国的Bosch公司,因为CAN就是这个公司开发的(和Intel)CAN有很多优秀的特点,使得它能够被广泛的应用。比如:传输速度最高到1Mbps,通信距离最远到10km,无损位仲裁机制,多主结构。近些年来,CAN控制_嵌入式can

LabVIEW应用开发——基本函数(一)_labview函数-程序员宅基地

文章浏览阅读2.2k次。LabVIEW作为一门G语言编程,基本概念很难和常规语言一样,要实现运算,需要使用运算函数,通过使用连线,把需要运算的控件和符号连接起来。相对于常规语言,这一块逻辑代码的可读性还是比较差的,需要我们多写、多读、多了解才能快速阅读和开发。_labview函数

安卓带图标提示的Toast——Toasty_toast去掉图标-程序员宅基地

文章浏览阅读4.4k次,点赞4次,收藏11次。Toasty这个看起来不错,虽然有点不算太好看,但通过它的自定义方法最终做出来的还不错它的使用方法及其的简单,我甚至都不想写这个Toasty的github地址官方图片第一步:新建项目,在project的build.gradle中添加maven { url "https://jitpack.io" }在app的build.gradle中添加依赖implementat..._toast去掉图标

随便推点

Flask框架(flask中的request对象,获取请求参数,保存上传的文件)_request.form.name只能获取第一个-程序员宅基地

文章浏览阅读1w次。1.request中包含了前端发送过来的所有数据 ,请求的 request 对象中保存了一次HTTP请求的一切信息。 通过request.from可以直接发送提取请求体中的表单格式数据,是一个类字典的对象 通过get方法只能拿到多个重名参数的第一个 2. reques常用的属性: 4.这里会用到Postman工具 下载:打开官网,https..._request.form.name只能获取第一个

需求分析(知识点总结)_功能需求分析-程序员宅基地

文章浏览阅读9.9k次,点赞9次,收藏73次。学习目标:需求分析(知识点总结)学习内容:数据流图(Data Flow Diagram,简称DFD)建模方法核心:数据流特性:1、抽象性:只有信息和数据存储、流动、使用以及加工的情况,所以描述的是抽象出来的数据2、概括性:把系统对各种业务的处理过程联系起来考虑,形成总体,反映数据流之间的概括情况数据库应用系统(DBAS)性能指标:1、数据操作响应时间(数据访问响应时间)2、系统吞吐量:指系统在单位时间内可以完成的数据库事务或查询的数量3、允许并发访问的最大用户数4、每TPS代价值_功能需求分析

html导出docx处理图片img不标准_htmldocx 导出 图片-程序员宅基地

文章浏览阅读443次。<dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j</artifactId> <version>6.1.0</version> <exclusions> <exclusion> <groupI..._htmldocx 导出 图片

AT24CXX系列芯片在STM32F103单片机下的读写程序_at24c128 正点原子-程序员宅基地

文章浏览阅读4.6k次,点赞9次,收藏32次。本程序取自正点原子开发板,应用于STM32F103单片机,适用AT24C01,AT24C02,AT24C04,AT24C08,AT24C16,AT24C32,AT24C64,AT24C128,AT24C256,AT24C512系列I2C存储芯片。一、sys.h#ifndef __SYS_H#define __SYS_H #include "stm32f10x.h"//////////////////////////////////////////////////////////////._at24c128 正点原子

log4j2漏洞复现(CVE-2021-44228)_jndi-injection-exploit-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏8次。log4j2漏洞复现(CVE-2021-44228)漏洞简介:log4j是Apache公司的一款JAVA日志框架,基本上只要是java的框架都会用到这个log4j框架,所以上周不管是不是IT圈的都几乎被刷屏了,可见这个洞的危害之大,波及范围之广。所以复现一下。影响版本:Apache Log4j 2.x >=2.0-beta9 且 < 2.15.0复现环境1:1.log4shell-vulnerable-app环境:docker run --name vulnerable-a_jndi-injection-exploit

【廖雪峰python教程学习】——(一)python基础-程序员宅基地

文章浏览阅读4.4k次。数据类型和变量Python还允许用r’’’'表示内部的字符串默认不转义如果字符串内部既包含’又包含" 可以用转义字符\来标识Python允许用’’’ … ‘’'的格式表示多行内容在Python中赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量[动态语言][静态语言:Java…]在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错在Python中,通常用全部大写的变量名表示常量print(*objects, sep=' ', end_廖雪峰python教程

推荐文章

热门文章

相关标签