精华内容
下载资源
问答
  • 嘴上应着,心里在想,备注列在哪里啊,这么多列,我得拽拽鼠标,因为做的Excel表,列数太多了,屏幕上显示不完整,我得向右拖拖啊。找到了,在这里,领导!看完“备注”列,领导发现有一行数据需要重新核对。你翻到...

    嗨,我是爱踢汪。小张,把你上午做的“存货盘点表”打开,我看看“备注”列的内容。

    95a25200c28a938da83c715c03678894.png

    哦,好的。嘴上应着,心里在想,备注列在哪里啊,这么多列,我得拽拽鼠标,因为做的Excel表,列数太多了,屏幕上显示不完整,我得向右拖拖啊。找到了,在这里,领导!

    e6b89f58e8678d81ee2b0b4acc1ecd25.png

    看完“备注”列,领导发现有一行数据需要重新核对。你翻到“存货名称”列,我看看详细情况。

    小张又开始向左拖动鼠标,拖拖拖,拖到了B列,在这里,领导。

    a0ca203e0fca97104199f69cb8f67583.png

    额,你在用Excel的时候,是否也是这么业余?假设,一个有上百列数据的Excel表格,我们要如何才能快速定位跳转到指定的列。难道还是这样用鼠标左拖右拽吗?

    看看专业人士是如何操作的。

    第一步:选取Excel表格的前两行的区域(注意哦,只选中有数据的区域,本文的案例就是选中:A1:L2单元格区域)。

    第二步:执行:公式——根据所选内容创建。

    253e8c9d8af057ed30b6413bcbc3350a.png

    第三步:勾选“首行”,确定。

    9bcb4c3a5f513127c3b89d7874ebaf31.png

    第四步:然后在Excel工作表左上角的名称框里面,我们可以很直观的选择相应的列,直达目标区域。

    e7643039335ebff52a86db0e3740b4b4.png

    温馨提示:

    如果遇到Excel工作表行列数据都非常多,多用冻结首行首列,名称框、查找、定位等功能来快速定位跳转到Excel数据区域。

    今天的分享就到这里了。我是爱踢汪,您的关注是我坚持到现在的唯一动力,有了您的支持与鼓励,我才有信心一直坚持下去,继续奉上更多内容。衷心期待您能点一下上面红色关注按钮,关注我一下。万分感谢!

    展开全文
  • 微信翻译小程序在哪里,如何使用

    千次阅读 2019-01-16 17:35:14
    2.搜索里输入需要用到的小程序名称,然后点击对应的小程序进入主页。 3.进入小程序后点击页面下方的提示“请输入你要翻译的文字或短句”。 4.这时会出现一个新的页面,此先输入需要识别的文...

    随着可以的发展,很多小程序都可以代替软件完成一些操作像翻译,不在需要APP直接用小程序就可以了,操作方法简单还能节省手机空间幺!
    操作方法:
    1.先把手机连接上网络然后打开微信,在主页的右上角点击方放大镜图标。
    微信翻译小程序在哪里,如何使用
    2.在搜索框里输入需要用到的小程序名称,然后点击对应的小程序进入主页。

    微信翻译小程序在哪里,如何使用

    3.进入小程序后点击页面下方的提示“请输入你要翻译的文字或短句”。

    微信翻译小程序在哪里,如何使用

    4.这时会出现一个新的页面,在此先输入需要识别的文字后,输入完成后选择需要翻译的语言,然后点击立即翻译。

    微信翻译小程序在哪里,如何使用

    5.点击立即立即翻译后会出现一个翻译中的字样,在此等待一下翻译的过程,翻译结束后直接在此页面显示翻译的结果,在此可以对翻译的结果选择复制,右下角的符号就是复制符号。

    微信翻译小程序在哪里,如何使用

    小程序将中文翻译为英文的方法就这五步,不仅可以翻译英语其他的语言也是可以的。

    转载于:https://blog.51cto.com/14080884/2343486

    展开全文
  • Spring Eureka发现框架

    2020-08-27 19:33:38
    可能存在“新服务上线”、“原本正常运行的某服务器因为特殊原因或故障而变为不可用”等问题,需要使用比较明确的方式使是“各服务器都能知道其它服务器在哪里(主机名称或IP地址是多少,端口号是多少等)”,发现...

    1. Eureka简介

    Eureka是Spring Cloud中的一种“发现”框架,其作用在于:在集群项目中,各微服务项目是部署在不同的服务器上的,并且,各微服务项目可能需要彼此协作才可以完成整个任务,即存在“服务器与服务器之间的调用”,但是,可能存在“新服务上线”、“原本正常运行的某服务器因为特殊原因或故障而变为不可用”等问题,需要使用比较明确的方式使是“各服务器都能知道其它服务器在哪里(主机名称或IP地址是多少,端口号是多少等)”,发现框架起到的主要作用就是:

    • 其它各服务器都会在“发现”服务器上进行注册;
    • “发现”服务器使用“注册表”记录下当前整个集群中已经注册的所有服务器;
    • 其它各服务器都可以从“发现服务器”上抓取注册表,从而得知集群中有哪些其它服务器,及这些服务器的相关信息。
      在这里插入图片描述
      所以,Eureka存在的最终价值就是为各服务器之间的调用奠定基础!

    2. 创建Eureka注册中心

    创建新的子模块项目straw-eureka-server,创建时,依然使用SpringBoot的创建向导:
    在这里插入图片描述
    在创建过程中,在选择依赖时,勾选Eureka Server
    在这里插入图片描述
    创建好的项目中,在pom.xml中直接就有了<dependencyManagement>节点,管理了spring-cloud-dependencies的依赖,这个依赖是SpringCloud家族的依赖,包括了许多框架,例如Eureka服务器端、Eureka客户端、Zuul网关等:
    在这里插入图片描述
    由于当前项目中,多个子模块项目都可能使用到SpringCloud中的框架,所以,应该将以上依赖交给父级的straw项目进行管理,以便于统一管理版本:
    在这里插入图片描述
    另外,在创建straw-eureka-server时还在pom.xml中指定了所依赖的SpringCloud家族的版本:
    在这里插入图片描述
    所以,还需要将这个版本属性配置到straw父项目中:
    在这里插入图片描述
    注意:将版本配置到父级时,推荐将版本号改为Hoxton.SR3,目前,关于Hoxton.SR6的版本已知的问题有“当服务器端向客户端响应JSON格式的数据时,会将响应头的Content-Type设置为application/xhtml+xml,会导致客户端解析失败”,该问题的解决方案未知!

    然后,删除straw-eureka-server中不必要的配置,修改所指定的父级项目,添加spring-boot-starter-web依赖以保证当前项目是可以启动的,最终的pom.xml应该是:

    <?xml version="1.0" encoding="UTF-8"?>
    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>cn.tedu</groupId>
            <artifactId>straw</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>cn.tedu</groupId>
        <artifactId>straw-eureka-server</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>straw-eureka-server</name>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    
    </project>
    

    然后,删除项目中的test文件夹。

    application.properties中添加配置:

    # 配置当前Eureka-Server项目的端口号,建议使用8761,是Eureka服务器端默认的端口号
    server.port=8761
    
    # 将当前项目注册到Eureka Server,设置为false表示不注册
    # 每个Eureka Server也是一个Eureka Client
    # 当不使用Eureka集群时,不应该注册自己
    eureka.client.register-with-eureka=false
    # 从Eureka Server抓取注册表,设置为false表示不抓取
    eureka.client.fetch-registry=false
    

    最后,在启动类的声明之前添加@EnableEurekaServer注解,以表示“启用Eureka服务器端”:

    @SpringBootApplication
    @EnableEurekaServer
    public class StrawEurekaServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(StrawEurekaServerApplication.class, args);
        }
    
    }
    

    完成后,启动项目,在浏览器中输入 http://localhost:8761 即可访问到Eureka服务器运行状态页面:
    在这里插入图片描述
    也许,在一段时间之后,或后续正常使用时,可能会在页面中出现警告信息:
    在这里插入图片描述
    这段警告信息可以暂时无视!

    3. 准备Eureka客户端

    在整个集群中,除了Eureka服务器端以外的其它应用服务器都是Eureka客户端,在各客户端项目(当前项目的straw-apistraw-gateway)的pom.xml中添加依赖:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    

    以上依赖的代码是将Eureka服务器端的依赖复制过来,将artifactId最后的server单词换成client即可。

    其实,只需要添加以上依赖,这些项目就会自动成为Eureka客户端,并且,启动这些项目后,它们会在Eureka服务器端进行注册,然后,在Eureka服务器运行状态页面,就可以看到这些客户端了:
    在这里插入图片描述

    早期版本中,各个Eureka客户端的启动类中还需要添加@EnableEurekaClient注解,在新版本的框架中已经不需要使用该注解了!

    如果没有进行进一步的客户端配置,则以上注册的信息中,无法正常显示Eureka客户端的名称(以上列表中的Application一栏显示的是UNKNOWN),并且,在Status列,可能显示客户端的主机名,也可能显示客户端的IP址,不能完全确定!

    在每个Eureka客户端项目的application.properties中,都需要添加一些配置,以straw-gateway为例,添加配置:

    # 应用程序名称,将表现在Eureka服务器状态页面的列表中
    spring.application.name=gateway
    

    然后,使用同样的方式,在straw-api项目中也添加这些配置。

    配置完成后,将straw-gatewaystraw-api这2个项目都重启,然后,刷新Eureka服务器端的状态列表(可能最多等待30秒才可以看到新注册的信息):
    在这里插入图片描述
    然后,在Eureka客户端项目中继续配置:

    # 指定Eureka客户端注册时是否使用IP地址来注册
    # - true:使用IP地址来注册,应该配合 eureka.instance.ip-address 属性一起使用
    # - false:使用主机名来注册
    eureka.instance.prefer-ip-address=true
    # 指定Eureka客户端注册时将自身注册为哪个IP地址,127.0.0.1等同于localhost,表示本机
    eureka.instance.ip-address=127.0.0.1
    

    配置完成后,重启该项目,刷新Eureka服务器状态列表:
    在这里插入图片描述
    也可以配置为使用主机名来注册:

    # 指定Eureka客户端注册时是否使用IP地址来注册
    # - true:使用IP地址来注册,应该配合 eureka.instance.ip-address 属性一起使用
    # - false:使用主机名来注册,应该配置 eureka.instance.hostname 属性一起使用
    eureka.instance.prefer-ip-address=false
    # 指定Eureka客户端注册时将自身注册为哪个IP地址,127.0.0.1等同于localhost,表示本机
    eureka.instance.ip-address=127.0.0.1
    # 指定Eureka客户端注册时将自身注册为哪个主机名称
    eureka.instance.hostname=localhost
    

    以上eureka.instance.ip-addresseureka.instance.hostname这2个配置是可以同时存在的,但是只有1个会生效,取决于eureka.instance.prefer-ip-address的值!

    最后,目前在Eureka服务器端的信息列表中显示的Status列中的信息可能比较“随缘”,与实际信息不符,例如“已经指定注册为localhost,在列表中却显示IP地址”,为了保证显示的字样不会引起误解,还应该添加配置:

    # 指定Eureka客户端在服务器端状态列表中显示的名称
    eureka.instance.instance-id=${eureka.instance.hostname}:${spring.application.name}:${server.port}
    

    最终,以straw-gateway为例,完整的配置代码是:

    # 设置服务器端口,注意:如果使用的是MacOS、Linux等非Windows操作系统,可能需要另行设置操作系统权限才可以使用80端口
    server.port=80
    
    # 应用程序名称,将表现在Eureka服务器状态页面的列表中
    spring.application.name=gateway
    
    # 指定Eureka客户端注册时是否使用IP地址来注册
    # - true:使用IP地址来注册,应该配合 eureka.instance.ip-address 属性一起使用
    # - false:使用主机名来注册,应该配置 eureka.instance.hostname 属性一起使用
    eureka.instance.prefer-ip-address=false
    # 指定Eureka客户端注册时将自身注册为哪个IP地址,127.0.0.1等同于localhost,表示本机
    eureka.instance.ip-address=127.0.0.1
    # 指定Eureka客户端注册时将自身注册为哪个主机名称
    eureka.instance.hostname=localhost
    # 指定Eureka客户端在服务器端状态列表中显示的名称
    eureka.instance.instance-id=${eureka.instance.hostname}:${spring.application.name}:${server.port}
    

    各Eureka客户端都完成了配置后,再次重启各Eureka客户端,并刷新Eureka服务器状态列表:
    在这里插入图片描述

    4. Eureka相关术语

    - Eureka Server

    Eureka服务器项目,也称之“注册中心”,在同一套架构中,可能存在多个Eureka Server形成集群;

    - Eureka Client

    每个在Eureka Server中注册的微服务项目,也可以称之为“实例”,或“节点”;

    - registry:注册表

    Eureka Client向Eureka Server提交注册信息,主要包括实例名、主机地址、端口号等信息,在Eureka Server端就会整理为注册表,该注册表中记录了所有当前注册的Eureka Client的信息,并且,该注册表可以被所有Eureka Client抓取;

    - fetch:抓取

    Eureka Client从Eureka Server获取注册表。

    当Eureka Client获取注册表后,会在本地进行缓存,并且根据缓存的注册表来查找整个架构中的其它微服务项目运行在哪里。

    在Eureka Client中缓存注册表还有一个好处,就是即使Eureka Server出现了故障,Eureka Client依然能够根据缓存的注册表找到其它微服务项目的服务器!

    - 续订租约

    Eureka Client每间隔一段时间都会向Eureka Server发送消息进行注册,当然,从概念上来说,不可能每次都是重新注册,除了第1次以后,后续的每一次都称之为“续订”,各Eureka Client通过“续订”向Eureka Server表示“我还处理正常的运行状态”。

    - 心跳周期

    Eureka Client向Eureka Server发送“续订”的间隔时间,默认是30秒。

    - 服务剔除

    如果Eureka Server在若干个心跳周期之后仍没有接收到某个Eureka Client的“续订”,就会将这个Eureka Client视为不可用,会将其从注册中剔除。

    5. Eureka Server集群

    如果Eureka Server宕机,各Eureka Client依然可以通过缓存的注册表实现相互访问,并不会因为Eureka Server宕机而导致整个架构系统变得不可用!但是,如果此时上线了新的服务,或正在运行的某个服务也宕机,或正在运行的某个服务需要下线,则各Eureka Client中缓存的注册表不会更新,也就导致各Eureka Client不知道新上线了服务,或下线了哪些服务。

    为了提高Eureka Server的可用性,避免Eureka Server宕机后各Eureka Client中的注册表不准,可以架设Eureka Server集群,即准备多个Eureka Server,即使其中的某一些Eureka Server宕机了,只要还存在1个或以上的Eureka Server还在正常工作,整个架构系统的注册表就是没有问题的!

    实现Eureka Server集群的原理非常简单:每个Eureka Server也把自身当作为一个Eureka Client,去其它的Eureka Server中注册并抓取注册表!

    假设需要架设3个Eureka Server以形成集群,这3个Eureka Server分别运行在:

    • 1号Eureka Server:192.168.0.101:8761
    • 2号Eureka Server:192.168.0.102:8762
    • 3号Eureka Server:192.168.0.103:8763

    则在1号Eureka Server中需要配置:

    # 指定Eureka Server
    eureka.client.service-url.defaultZone=http://192.168.0.102:8762/eureka, http://192.168.0.103:8763/eureka
    

    如果Eureka Server只有1个,并且是localhost,并且运行在8761端口,则不需要显式的进行配置!

    并配置:

    # 将自己注册到别的Eureka Server中去
    eureka.client.register-with-eureka=true
    # 从别的Eureka Server抓取注册表
    eureka.client.fetch-registry=true
    

    同理,2号Eureka Server需要配置:

    # 指定Eureka Server
    eureka.client.service-url.defaultZone=http://192.168.0.101:8761/eureka, http://192.168.0.103:8763/eureka
    # 将自己注册到别的Eureka Server中去
    eureka.client.register-with-eureka=true
    # 从别的Eureka Server抓取注册表
    eureka.client.fetch-registry=true
    

    同理,3号Eureka Server需要配置:

    # 指定Eureka Server
    eureka.client.service-url.defaultZone=http://192.168.0.101:8761/eureka, http://192.168.0.102:8762/eureka
    # 将自己注册到别的Eureka Server中去
    eureka.client.register-with-eureka=true
    # 从别的Eureka Server抓取注册表
    eureka.client.fetch-registry=true
    

    最后,在各Eureka Client中添加:

    # 指定Eureka Server
    eureka.client.service-url.defaultZone=http://192.168.0.101:8761/eureka, http://192.168.0.102:8762/eureka, http://192.168.0.103:8763/eureka
    

    6. Eureka Server自我保护机制

    Eureka Server在运行期间会统计“丢失心跳比例”,任何连续3次心跳续订失败的Eureka Client都会被视为不干净的终止(这样的Eureka Client没有被正确的关闭),如果这样的Eureka Client在15分钟内超过85%的比例,Eureka Server就会自动开启“自我保护机制”,同时,在Eureka Server的信息列表页面会提示警告信息:
    在这里插入图片描述
    以上警告信息大意如下:

    注意:Eureka可能错误的将某些已经下线的实例声明为在线,续订的比例低于阈值,为了安全起见,这些实例将不会被过期!
    

    之所以会出现“自我保护机制”,可能因为:

    • Eureka Server已经启动,却没有启动任何Eureka Client,则“丢失心跳比例”被视为100%;
    • 整个构架已经全部启动,但是,因为网络波动,或Eureka Client负载等问题,导致大量的Eureka Client不可用;
    • 异常关闭了Eureka Client,例如停电、死机,或者直接杀死相关进程等。

    之所以会存在“自我保护机制”,是为了确保出现灾难性事故(特别是网络故障)时不会清除注册表,将灾难传播到下游所有Eureka Client中。

    一旦开启“自我保护机制”,会有如下表现:

    • Eureka Server不再从注册表剔除任何Eureka Client,即使新出现了某些Eureka Client长时间没有心跳;
    • Eureka Server仍可以接收新上线的Eureka Client的注册;
    • Eureka Server不再向各可用的Eureka Client分发新的注册表(Eureka Client无法抓取新的注册表);
    • 当“丢失心跳比例”低于阈值时,Eureka Server会关闭自我保护机制,并将新的注册表同步到所有Eureka Client(Eureka Client可以再次抓取到新的注册表)。

    7. Zuul网关

    Spring Cloud中的Zuul网关是“网关路由”,当整个架构中使用了Zuul以后,在后续客户端进行访问时,都只会直接访问网关,而不会,也不可以直接访问到集群中的其它服务器!

    所以,Zuul网关是提供了整个架构的统一入口,并实现转发,使得其它服务器去完成具体的数据处理!在这一点来看,与SpringMVC中的DispatcherServlet是有一定相似之处的!

    在一个构架中,Zuul的主要作用有:

    • 路由功能,甚至动态路由;
    • 身份验证与其它安全性相关的验证;
    • 减少负载;
    • 其它。

    straw-gateway项目中,在pom.xml中添加依赖:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    </dependency>
    

    可以直接复制eureka-servereureka-client的依赖,将<artifactId>中的eureka-servereureka-client改为zuul即可!

    由于父级项目straw此前添加管理依赖时已经添加了spring-boot-dependencies,而Zuul是其中的一部分,所以,此次只需要在straw-gateway子模块项目中直接添加Zuul的依赖即可。

    Zuul的主要作用是路由,原本客户端可以通过 http://localhost:8080/api/v1/users/student/register?phone=13100131001&password=1234&inviteCode=JSD1912-876840 尝试注册,客户端是直接访问 http://localhost:8080 端口的,也就是直接访问straw-api项目的,现在,就应该改为访问网关,由网关路由转发到straw-api项目!

    首先,就需要在straw-gatewayapplication.properties中配置路由转发规则:

    # 指定路由规则api(以下配置属性名中routes右侧的名字)的服务id
    # 取值为服务在Eureka Server中注册的名字
    zuul.routes.api.service-id=api
    # 表示接管所有由 /api 为前缀的请求
    zuul.routes.api.path=/api/**
    

    关于以上配置:

    • zuul.routes右侧的api是自定义的名称,只要以上2条属性保持一致即可;
    • 以上第2条属性的值/api/**表示所有访问到网关的、由/api作为前缀的请求路径,都将转发由另一个服务项目来处理;
    • 以上第1条属性的值api就是实际处理请求的项目,该值必须是处理请求的项目在Eureka Server中注册的名字。

    以上配置的完整意思是:所有访问到网关的、由/api作为前缀的请求路径,全部由Eureka Server中注册为api的服务来处理!

    最后,在StrawGatewayApplication启动类的声明之前添加@EnableZuulProxy注解:

    @SpringBootApplication
    @EnableZuulProxy
    public class StrawGatewayApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(StrawGatewayApplication.class, args);
        }
    
    }
    

    完成后,将straw-gateway项目重启,原本可以通过straw-api项目的以下URL尝试注册:

    http://localhost:8080/api/v1/users/student/register?phone=13100131001&password=1234&inviteCode=JSD1912-876840

    现在,就可以通过新的URL尝试注册:

    http://localhost/api/api/v1/users/student/register?phone=13100131001&password=1234&inviteCode=JSD1912-876840

    新的URL的主机是网关的主机,即 http://localhost ,使用的端口号是网关的80端口,然后,必须添加 api(因为配置时的path值是/api/**),后续的部分是原straw-api项目的访问路径!

    由于使用网关访问时URL中有2层/api,应该删除其中的1个,则可以在straw-api项目的UserController中,将原本的@RequestMapping("/api/v1/users")改为@RequestMapping("/v1/users")即可,最终,需要尝试注册时,可使用的URL就是:

    http://localhost/api/v1/users/student/register?phone=13100131001&password=1234&inviteCode=JSD1912-876840

    或者:

    http://localhost:8080/v1/users/student/register?phone=13100131001&password=1234&inviteCode=JSD1912-876840

    另外,为了避免Spring Security认为没有登录而不允许访问,可以暂时修改straw-api项目中的WebSecurityConfig类中的configure(HttpSecurity http)方法,将原有的访问控制暂时注释掉,添加http.authorizeRequests().anyRequest().permitAll();以对各种请求直接放行:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
    //        // 关闭跨域攻击
    //        http.csrf().disable();
    //        // 当前方法的主要作用是:访问控制
    //        http.authorizeRequests()
    //                // 使用antMatchers()配置需要管理权限的URL,可以使用通配符,?表示任何1个字符,*表示任何1层路径资源,**表示任何层次的资源
    //                // 例如:配置为 /user/* 可以匹配 /user/delete、/user/list,却不可以匹配 /user/2020/list
    //                // 例如:配置为 /user/** 可以配置 /user/delete、/user/list、/user/2020/list、/user/2020/08/list
    //                // 紧随其后,使用hasAuthority()配置权限标识
    //                .antMatchers("/admin/list").hasAuthority("admin_list")
    //                .antMatchers("/admin/delete").hasAuthority("admin_delete")
    //                .antMatchers("/user/**").hasAuthority("user")
    //                // 对任何请求进行授权检查
    //                .anyRequest().authenticated();
    //        // 验证权限时,是使用登录表单进行授权的
    //        http.formLogin();
        http.authorizeRequests().anyRequest().permitAll();
        http.csrf().disable();
    }
    

    8. 处理注册页面

    先在页面中的表单区域的父级添加id,以便于后续创建Vue对象:
    在这里插入图片描述
    并为表单<form>绑定Vue事件:
    在这里插入图片描述
    然后,为每一个输入框都通过v-model绑定Vue属性,例如:
    在这里插入图片描述
    关于页面中的JavaScript代码:

    <script>
        // 创建Vue对象,Vue()构造方法的参数是一个JSON对象
        let app = new Vue({
            // el属性:Vue对象对应页面中的哪个区域,取值时,使用#作为前缀表示根据id选择
            el: '#app',
            // data属性:定义Vue对象中的属性,值是JSON对象
            data: {
                // 定义了名为inviteCode的属性,需要在以上HTML代码中通过Vue语法绑定某个标签中的某属性值
                inviteCode: null,
                phone: null,
                nickname: null,
                password: null,
                confirmPassword: null
            },
            // methods属性:定义Vue中的方法,值是JSON对象,可能是在页面中已经绑定的,也可能是内部调用的
            methods: {
                // 以下register是当前JSON对象的属性名,也是一个JavaScript的函数名称,将可以根据该名称来调用
                register: function() {
                    // alert("准备执行注册!!!");
                    // 使用JSON格式组织需要提交的数据
                    // 在JSON对象中,各属性名必须与服务器端接收请求参数所设定的名称保持一致
                    let data = {
                        'inviteCode': app.inviteCode,
                        'phone': app.phone,
                        'nickname': app.nickname,
                        'password': app.password
                    };
                    // 在控制台输出,检查以上值是否正确,在浏览器的控制台中可以查看数据
                    console.log('data >>> ' + data);
                    console.log(data);
                    // 提交ajax请求,并处理结果
                    $.ajax({
                        url: '/api/v1/users/student/register',
                        data: data,
                        type: 'post',
                        dataType: 'json',
                        success: function(json) {
                            // alert(json);
                            if (json.state == 2000) {
                                alert("注册成功!!!");
                            } else {
                                alert(json.message);
                            }
                        }
                    });
                }
            }
        });
    </script>
    

    附:设计模式

    设计模式是为了解决某些特定存在的问题,总结出来的相对固定的编码方式。

    设计模式的种类是固定的。

    - 工厂模式

    工厂模式是设计模式中“生产对象型”模式的一种。

    例如:

    public class UserService {}
    
    public class UserServiceFactory {
        public UserService newInstance() {
            return new UserService();
        }
    }
    

    以上代码中,UserServiceFactory就是一个“工厂”,调用其内部的newInstance()方法就可以获取UserService的对象!

    使用工厂来创建对象的原因可能有很多种,例如,可能需要创建出来的是子类的对象/接口的实现类的对象,却不关心子类/实现类的特点,例如:

    public abstract class UserService {} 
    // public interface UserService {}
    
    public class SubUserService extends UserService {}
    // public class UserServiceImpl implements UserService {}
    
    public class UserServiceFactory {
        public UserService newInstance() {
            return new SubUserService();
            // return new UserServiceImpl();
        }
    }
    

    另外,使用工厂的原因,也可能是为了解耦,例如:当需要UserService类型的对象时:

    UserService userService = new UserServiceFactory().newInstance();
    

    其实,以上创建出来的对象一定是SubUserService/UserServiceImpl的对象,但是,子类/实现类的类名根本不在以上代码中体现!则,万一原有的SubUserService/UserServiceImpl已经不再能够满足设计需求,也可以轻松替换,项目中原有的获取对象的方法(例如以上代码)是不需要经过任何调整的!

    关于工厂类中生成对象的方法,还可以添加static修饰符,例如:

    public class UserServiceFactory {
        public static UserService newInstance() {
            return new SubUserService();
            // return new UserServiceImpl();
        }
    }
    

    则可以直接通过UserServiceFactory.newInstance()来创建对象,就不需要事先创建UserServiceFactory的对象了!

    另外,声明的类型(抽象类/接口)也可以是工厂本身,例如:

    public abstract class UserService {
        public static UserService newInstance() {
            return new SubUserService();
            // return new UserServiceImpl();
        }
    }
    

    在Java中,如果要获取Calendar类的对象,就必须:

    Calendar calendar = Calendar.getInstance();
    

    以上就是简单的静态工厂模式。

    展开全文
  • 1、准备工作(1)Python版本为3.6或者更高版本(2)已经创建了一个Python工程并且添加了内容,具体参考:Getting Started tutorial2、第一步——运行代码打开之前编写的Oldboy.py文件,编辑中右键,选择快捷菜单中的...

    1、准备工作

    (1)Python版本为3.6或者更高版本

    (2)已经创建了一个Python工程并且添加了内容,具体参考: Getting Started tutorial

    2、第一步——运行代码

    打开之前编写的Oldboy.py文件,在编辑框中右键,选择快捷菜单中的“Run 'Oldboy'”选项。

    3、什么是Run/Debug模式

    每个需要运行/调试的脚本文件都需要一个特殊的配置文件来指定其脚本名称、所在目录以及其他重要的运行调试信息。Pycharm已经集成了这种配置文件,避免用户手动去创建。

    每次当你单击Run或者Debug按钮时(或者在快捷菜单中执行相同操作),实际上都是将当前的运行/调试配置文件加载到当前的调试模型中。

    如果你仔细观察第一张图片就会发现,在组合框中根本就没有 run/debug的相关信息,知道第二张图片中它们才出现。这就意味着当执行运行/调试命令的时候,Solver脚本的run/debug配置文件才会自动生成,正如现在所显示的这样。

    此时再主工具栏中Run(绿色箭头按钮)和Debug(绿色甲壳虫按钮)两个按钮变得可用:

    图中两个按钮由Pycharm自动创建

    如果设置了多个run/debug方案,可以在图中的下拉列表里选中一个,作为当前的功项目配置文件。

    4、配置run/debug配置信息

    在上图的下拉列表中,单击Edit configuration选项,打开run/debug配置编辑窗口:

    在左侧目录中将会出现两个节点:Python和Default。在第一个节点目录下有一个单一的配置选项'oldboy',在第二个选项下则有很多配置信息。

    这意味着什么呢?

    在Default节点下,你只能看到框架的名称或者模式名称,如果你创建一个新的Run/Debug配置文件,它将会在所选中的模式分支下进行创建,如果你更改了Default节点下的设置,相应的与其相关的所有配置文件都会更改。

    例如,你想将Pycharm中所用到的Python解释器替换成远程或者本地解释器,就可以通过更改Python页面下的解释器设置,这样所有新建的调试配置文件都会使用这个新的解释器。

    早Python节点下,只用单一的配置选项'Oldboy',它属于Python类型的配置,但与Default节点下的Python机制并不相同,它使用一个非透明的图标进行的表示,这是用来指示当前配置文件的保存状态的,当你保存配置文件之后图标即变为非透明状态。例如,我们在Python类型下为当前的Solver脚本新建一个配置文件,取名'Oldboy1'。

    如果你对已存在的配置文件做了任何更改,这些更改只会应用于对应的脚本区域。

    5、正式运行代码文件

    我们已经能够通过一种非常直接的方式,接下来我们寻求其他方法来运行脚本。

    正如我们所知,运行脚本意味着加载当前的调试配置文件,因此,运行脚本主要遵循以下流程:

    (1)在主工具栏中,单击run/debug组框,确认当前的调试配置文件信息

    (2)做下面的工作(三选一即可):

    单击运行按钮,加载配置文件

    按下Shift+F10快捷键

    在主菜单上,选择Run → Run

    此时,我们可以在Run tool window.窗口中观察程序的运行结果。

    6、选择一个测试器

    首先,需要指定一个测试器。单击工具栏的设置按钮,打开Settings/Tools对话框,然后单击进入Python Intergated Tools页面(可以通过搜索功能找到),默认选择如下:

    7、创建一个test程序块

    首先我们创建一个test实例。Pycharm提供了一种非常智能的创建测试代码的方法:单击选中类名然后按下Ctrl+Shift+T快捷键,或者在主菜单中选择Navigate → Test,如果test程序已存在,则会直接跳转到对应代码,否则创建它:

    按照系统提示进行操作,Pycharm会显示如下对话框:

    单击OK按钮,查看创建结果:

    此时Pycharm已经自动创建了一个测试类,当然这只是一个类框架,需要我们手动编写测试函数。

    8、运行测试代码

    一切就绪后,右击测试类名,在弹出的快捷菜单中选择运行命令:

    9、调试运行

    首先要弄清楚,为什么要进行调试?假设我们的程序在运行过程中命中了一个错误,那我们如何定位错误发生的位置?这就需要进行调试。

    在Pycharm中我们可以在其中直接对程序进行调试,唯一需要做的准备工作就是在程序必要的地方加设断点,接下来我们进行详细的介绍:

    10、什么是断点?

    一个breakpoint标记了一个行的位置,当程序运行到该行代码的时候,Pycharm会将程序暂时挂起以方便我们对程序的运行状态进行分析。Pycharm支持若干中类型的断点 types of breakpoints,可以通过对应图标进行分辨。

    这里我们采用Python的行断点为例进行介绍

    11、设置断点

    方法非常简单,单击代码左侧的空白灰色槽即可:

    注意断点会将对应的代码行标记为红色,这种颜色标记目前还不能被用户所更改,我们会尽快出台解决方案。

    顺便说一句,取消断点的操作也很简单,在同样位置再次单击即可。

    当你将鼠标指针悬停在断点上方时,Pycharm会显示断点的关键信息,行号以及脚本属性,如果你希望更改该断点的属性,右击断点:

    12、代码调试

    接下来,我们正式开始对代码进行调试。

    首先从配置文件组框中选择同名的'Oldboy'文件作为当前调试的配置文件,然后单击调试按钮(绿色甲壳虫样式的按钮):

    接下来会Pycharm会执行以下操作:

    (1)PyCharm开始运行,并在断点处暂停

    (2)断点所在代码行变蓝,意味着Pycharm程序进程已经到达断点处,但尚未执行断点所标记的代码。

    (3)Debug tool window窗口出现,显示当前重要调试信息,并允许用户对调试进程进行更改。

    虽然Pycharm使用手册中已经完整提供了调试窗口中所有控件的功能信息,我们这里仍然对其进行简要介绍。我们发现窗口分为两个选项卡:Debugger tab and the Console tab。

    (1)Debugger窗口分为三个可见区域:Frames, Variables, 和 Watches。这些窗口列出了当前的框架、运行的进程,方便用户查看程序空间中变量的状态等。当你选择一个框架,就会显示出相关的变量信息,当然这些区域都是可以折叠隐藏的。

    (2)Console窗口显示当前的控制台输出信息,默认这个窗口位于Debugger之下,可以通过单击其标签将其前置显示。

    当然我们可以改变这些窗口的摆放位置,如果你不喜欢程序的默认排版的话。具体参加Moving tabs and areas章节。

    Debugger窗口的工作模式:

    按下F9(或者左侧工具栏的绿色箭头),程序会继续运行到下一断点处,通过这种方式你可以将每个断点都运行一遍,观察变量的变化。

    更多有关 Debugger窗口的信息参见软件手册:product documentation

    Console窗口的工作模式:

    为什么需要用到Console窗口呢?当我们需要查看程序给出的错误信息,或者进行一些额外的临时运算时,就需要在这个窗口里面进行。

    单击Console选项卡使其前置:

    激活了控制台机制,尝试在其中执行一些Python命令:

    展开全文
  • 便签导出的文件哪找? 敬业签的文件上传功能和导出功能,都非常的简洁明了。便签在上传文件的时候,只需要点击编辑下方的附件按钮,然后把文件拖至附件窗口,然后关闭附件窗口并保存该条便签即可。 敬业签导出...
  • 我们通过工程的settings文件找到这个变量,就能知道工程的第一个入口文件在哪里 打开mystie.urls文件 我们可以看到一个变量叫做urlpatterns 这个变量是Django工程预定的变量值 该变量是列表类型,(path,path,...
  • abcunit-后端 ABCUnit框架的存储后端,记录过程单元的成功和失败。 数据库后端 要使用此后端,您需要联系JASMIN服务...在哪里 table_name是将要插入的表日志的名称 连接到现有数据库并创建一个表来存储结果: <tabl
  • 你得通过某种方式告诉容器,我有叫做什么什么的类,它的位置在哪里哪里。 常用的配置Bean的方法就是使用xml进行配置 常用的bean的属性,或者字段有以下这些: 常见的属性是id和class两个属性,id代表这个...
  • 今天搭建了整天,可是现在这爬虫还没运行...需要注意的是,wheel,twisted,win32api之类的必备工具我都已经下载虚拟环境文件夹里面了,所以我的问题是:究竟我的框架哪里出现问题了?工作目录是否有误?该如何修正?
  • 我们昨天登录admin时创建的用户信息是存放在哪里了呢? auth系统的数据表: 从表的名称我们就能看出, auth_user,auth_group,auth_permission分别存放了用户,用户组,权限的信息表.另外三张表就是多对多的关系表 ...
  • 控制器文件写在哪里?   控制器:   控制器名称(首字母大写)+Controller.php, 例如:thp: UserController.class.php  Yii:User.php  Laravel:UserController.php 比如如下: UserController.php   ...
  • 是一个块级标签,可以包含段落、标题、表格、乃至...2.action:当表单输入完成后,把它的内容传送到哪里,一个路径 3.method:传送方式 1.get方式: ①.url?后面加上传送字符串②.传送资料会显示浏览器地址③.会有
  • 我是想要把任务名称在表右侧显示. 我自己是一个一个设置的,有点麻烦,不过也能做出来. 首先第一步点击表中带颜色的方框,之后会弹出一个窗口,选择条形图文本. 然后选择文本那里显示,我们想要右侧显示,就右侧...
  • 我想编写excel表,为此我编写了一个代码,但是当我的程序对象WritableSheet中执行时,它会收到以下警告。我可以知道我哪里错了吗? 另外,我使用keydriven框架来编写工作表。Warning: Sheet name D:\eclipse-jee-...
  • 前言这几天有人问我,UI自动化测试中使用到的页面定位元素应该存放在哪里比较合适?我想说的是如果你使用的是PO设计模式设计测试用例的话,可以把定位元素存在每一个page页面或者单独存放在一个目录中新键不同页面...
  • Visual Studio 2003下开发网站的都知道ASP.NET 1.1网站生成后都是一个唯一命名的程序集(项目名称.DLL),但是这种情况Visual Studio 2005的网站开发中不见了。Visual Studio 2005给我们提供了“发布网站”这样...
  • 点蓝字关注,获赠180本美国加州小学原版教材"暑假快要结束了。娃的手抄报作业完成了没?还没有?快来看看超级干货——如何让娃能够做一张...简单来说就是哪里写手抄报的名称哪里配图,哪里写文字,要给它们安排好...
  • 程序员写代码很孤独,每天只能和电脑屏幕交流,想要一个程序员鼓励师妹子,老板又不给配,如何...phpstorm安装插件在哪里?找到file->setting->plugins,在右侧搜索里输入插件名称,就能在线检索安装。 ...
  • 程序员写代码很孤独,每天只能和电脑屏幕交流,想要一个程序员鼓励师妹子,老板又不给配,...phpstorm安装插件在哪里?找到file->setting->plugins,在右侧搜索里输入插件名称,就能在线检索安装。一.Backgr...
  • 程序员写代码很孤独,每天只能和电脑屏幕交流,想要一个程序员鼓励师妹子,老板又不给配,...phpstorm安装插件在哪里?找到file->setting->plugins,在右侧搜索里输入插件名称,就能在线检索安装。一.Backgr...
  • 2020-08-18

    2020-08-18 10:48:30
    然后就会跳出 联机模块, 就会有三个填写跳出来,你只要填写名称和位置就可以了,名称一般都是填写项目的名称,位置就是你要把项目存放在哪里的路径。不过,你也可以随便更改名称 和位置 ,更改完后点击确定就
  • 官方的扫二维码的代码 在哪里改变的大小啊 注释全是英文的 看不懂 引用 的官方项目名称 QRCode
  • 我需要在组合中输入组织的简称。...我的错误在哪里?public class ToComboBoxModel extends AbstractListModel implements ComboBoxModel {private String selectedItem;private List orgs;public ToComboBo...
  • git删除仓库

    2020-09-24 17:52:06
    刚开通了Github,胡乱建了好多仓库,一开始不知道在哪里删除,在这记录一下过程: 1、点击Settings 2、拉到最下面,点击 Delete this repository 3、会弹出一个防止误删,按指示输入要删除的仓库名称并点击下面...
  • 越权、cookie与session、认证和授权

    万次阅读 2017-05-24 23:35:04
    越权修改 疑问开始 例子 黑盒 白盒 ...cookie保存在哪里 cookie名称在哪定义 什么时候服务器给用户cookie 认证和授权 什么是认证和授权 基本认证机制 1认证 1 HTTP的质询响应认证框架 2 认证协议与
  • 休息 规约 流交付 SSE通用消息 SSE Servlet在STREAM-DELIVER流上使用通用消息。 邮件主题必须为“ SSE”。... 在哪里: TOPIC是主题标识符 JSON_PAYLOAD是JSON格式正确的对象 ASSET_INAME是资产内部名称(可选框架)
  • 3、在Name中输入要添加的程序名称,在Command中输入要添加的程序的目标,如果不知在哪里,可右键单击该程序图标,选择属性,以要添加色程序Teamviewer 为例,如下图,这里的Command中的内容就是对应第
  • 我需要我的组合具有组织的简称。...我的错误在哪里?public class ToComboBoxModel extends AbstractListModel implements ComboBoxModel {private String selectedItem;private List orgs;public ToComboBoxMode...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 145
精华内容 58
关键字:

名称框在哪里