Java 轉PPT為圖片、PDF、SVG、XPS、ODP以及PPT和PPTX互轉

同一文檔,在不同的文檔查看器或者編譯環境中,需要對該文檔進行相應的格式轉換。下面的內容中,將介紹通過Java編程來實現PPT文檔格式轉換的方法。

使用工具:

  • Spire.Presentation for Java
  • IntelliJ IDEA

 

Jar文件獲取及導入

方法1通過官網獲取jar文件包。下載文件后,解壓,並將lib文件夾下的Spire.Presentation.jar文件導入IDEA程序。

方法2:通過maven倉庫安裝導入

 

Java代碼示例(供參考)

【示例1】PPT轉為圖片

import com.spire.presentation.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class PPTtoPNG {
    public static void main(String[] args) throws Exception{
        //創建Presentation對象
        Presentation ppt = new Presentation();

        //加載示例文檔
        ppt.loadFromFile("sample.pptx");

        //遍歷幻燈片
        for (int i = 0; i < ppt.getSlides().getCount(); i++) {
            //將幻燈片保存為BufferedImage對象
            BufferedImage image = ppt.getSlides().get(i).saveAsImage();

            //將BufferedImage保存為PNG格式文件
            String fileName =  String.format("ToImage.png", i);
            ImageIO.write(image, "PNG",new File(fileName));
        }
        ppt.dispose();

    }
}

PPT轉圖片效果:

【示例2PPT轉為PDF

import com.spire.presentation.FileFormat;
import com.spire.presentation.Presentation;

public class PPTtoPDF {
    public static void main(String[] args) throws Exception{
        //創建Presentation對象
        Presentation ppt = new Presentation();

        //加載示例文檔
        ppt.loadFromFile("sample.pptx");

        //保存為PDF文檔
        ppt.saveToFile("ToPDF.pdf", FileFormat.PDF);
        ppt.dispose();
    }
}

PPT轉PDF效果:

 

【示例3PPT轉為SVG

import com.spire.presentation.*;
import java.io.FileOutputStream;
import java.util.ArrayList;

public class PPTtoSVG {
    public static void main(String[] args) throws Exception{
        //創建Presentation對象
        Presentation ppt = new Presentation();

        //加載示例文檔
        ppt.loadFromFile("sample.pptx");

        //將PowerPoint文檔轉換為SVG格式,並以byte數組的形式保存於ArrayList
        ArrayList<byte[]> svgBytes =(ArrayList<byte[]>) ppt.saveToSVG();

        //遍歷ArrayList中的byte數組
        for (int i = 0; i < svgBytes.size(); i++)
        {

            //將byte數組保存為SVG格式文件
            byte[] bytes = svgBytes.get(i);
            FileOutputStream stream = new FileOutputStream(String.format("ToSVG.svg", i));
            stream.write(bytes);
        }
        ppt.dispose();

    }
}

PPT轉SVG效果:

 

【示例4PPT轉為XPS

import com.spire.presentation.*;

public class PPTtoXPS {
    public static void main(String[] args) throws  Exception{
        //加載測試文檔
        Presentation ppt = new Presentation();
        ppt.loadFromFile("sample.pptx");

        //保存為XPS
        ppt.saveToFile("ToXPS.xps",FileFormat.XPS);
        ppt.dispose();
    }
}

PPT轉XPS效果:

 

【示例5PPT轉為ODP

import com.spire.presentation.*;

public class PPTtoODP {
    public static void main(String[] args) throws Exception {
        //加載測試文檔
        Presentation ppt = new Presentation();
        ppt.loadFromFile("sample.pptx");

        //保存為ODP
        ppt.saveToFile("ToODP.odp",FileFormat.ODP);
    }
}

 

【示例6PPTPPTX互轉

import com.spire.presentation.*;

public class PPTXtoPPT {
    public static void main( String[] args) throws Exception{
        //創建Presentation對象
        Presentation ppt = new Presentation();

        //加載PPTX文檔
        ppt.loadFromFile("sample.pptx");

        //保存為PPT
        ppt.saveToFile("ToPPT.ppt", FileFormat.PPT);

        //PPT轉為PPTX
        //ppt.loadFromFile("sample.ppt");
        //ppt.saveToFile("ToPPTX.pptx",FileFormat.PPTX_2013);
        ppt.dispose();
    }
}

 

(本文完)

轉載請註明出處!

 

【精選推薦文章】

智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計

帶您來看台北網站建置台北網頁設計,各種案例分享

廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

SpringCloud微服務架構升級總結

一、背景

1.1 應用系統的架構歷史

1.2 什麼是微服務?

起源:微服務的概念源於 2014 年 3 月 Martin Fowler 所寫的一篇文章“Microservices”。文中內容提到:微服務架構是一種架構模式,它提倡將單一應用程序劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。

通信方式:每個服務運行在其獨立的進程中,服務與服務間採用輕量級的通信機制互相溝通(通常是基於 HTTP 的 RESTful API)。

微服務的常規定義:微服務是一種架構風格,一個大型複雜軟件應用由一個或多個微服務組成。系統中的各個微服務可被獨立部署,各個微服務之間是松耦合的。每個微服務僅關注於完成一件任務。

把原來的一個完整的進程服務,拆分成兩個或兩個以上的進程服務,且互相之間存在調用關係,與原先單一的進程服務相比,就是“微服務”。(微服務是一個比較級的概念,而不是單一的概念)

1.3 微服務架構的優勢

  • 可擴展性:在增加業務功能時,單一應用架構需要在原先架構的代碼基礎上做比較大的調整,而微服務架構只需要增加新的微服務節點,並調整與之有關聯的微服務節點即可。在增加業務響應能力時,單一架構需要進行整體擴容,而微服務架構僅需要擴容響應能力不足的微服務節點。
  • 容錯性:在系統發生故障時,單一應用架構需要進行整個系統的修復,涉及到代碼的變更和應用的啟停,而微服務架構僅僅需要針對有問題的服務進行代碼的變更和服務的啟停。其他服務可通過重試、熔斷等機制實現應用層面的容錯。
  • 技術選型靈活:微服務架構下,每個微服務節點可以根據完成需求功能的不同,自由選擇最適合的技術棧,即使對單一的微服務節點進行重構,成本也非常低。
  • 開發運維效率更高:每個微服務節點都是一個單一進程,都專註於單一功能,並通過定義良好的接口清晰表述服務邊界。由於體積小、複雜度低,每個微服務可由一個小規模團隊或者個人完全掌控,易於保持高可維護性和開發效率。

Spring Cloud作為目前最流行的微服務開發框架,不是採用了Spring Cloud框架就實現了微服務架構,具備了微服務架構的優勢。正確的理解是使用Spring Cloud框架開發微服務架構的系統,使系統具備微服務架構的優勢(Spring Cloud就像工具,還需要“做”的過程)。

1.4 什麼是Spring Boot?什麼是Spring Cloud?

Spring Boot框架是由Pivotal團隊提供的全新框架,其設計目的是用來簡化基於Spring應用的初始搭建以及開發過程。SpringBoot框架使用了特定的方式來進行應用系統的配置,從而使開發人員不再需要耗費大量精力去定義模板化的配置文件。

Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中的配置管理、服務註冊,服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分佈式會話和集群狀態管理等操作提供了一種簡單的開發方式。

1.5 微服務、Spring Boot、Spring Cloud三者之間的關係

  • 思想:微服務是一種架構的理念,提出了微服務的設計原則,從理論為具體的技術落地提供了指導思想。
  • 腳手架:Spring Boot是一套快速配置腳手架,可以基於Spring Boot快速開發單個微服務。
  • 多個組件的集合:Spring Cloud是一個基於Spring Boot實現的服務治理工具包;Spring Boot專註於快速、方便集成的單個微服務個體;Spring Cloud關注全局的服務治理框架。

二、技術解析

2.1 Everything is jar, Everything is http

Spring Boot通過@SpringBootApplication註解標識為Spring Boot應用程序。所有的應用都通過jar包方式編譯,部署和運行。

@SpringBootApplication 
public class Application {     
    private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);     
    public static void main(String[] args) {         
        SpringApplication.run(Application.class, args);         
        LOGGER.info(”啟動成功!");     
    } 
}

 

每個Spring Boot的應用都可以通過內嵌web容器的方式提供http服務,僅僅需要在pom文件中依賴spring-boot-start-web即可,原則上微服務架構希望每個獨立節點都提供http服務。

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

 

2.2 Spring boot Task 任務啟動和定時任務

在Spring Boot需要啟動任務時,只要繼承CommandLineRunner接口實現其run方法即可。

@SpringBootApplication 
public class ClientDataListener implements CommandLineRunner
    public void run(String... strings) throws Exception {     
        clientInfoListenerHandler(); 
    }
}

 

在Spring Boot需要執行定時任務時,只需要在定時任務方法上增加@Scheduled(cron = “0 15 0 * * ?”)註解(支持標準cron表達式),並且在服務啟動類上增加@EnableScheduling的註解即可。

@SpringBootApplication
@EnableScheduling
public class Application {     
    private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);     
    public static void main(String[] args) {         
        SpringApplication.run(Application.class, args);         
        LOGGER.info(”啟動成功!");     
    } 
}

 

// some class
@Scheduled(cron = "0 15 0 * * ?")
public void someTimeTask() {
    ***
}

 

2.3 Spring boot Actuator 監控

Actuator是spring boot提供的對應用系統自身進行監控的組件,在引入spring-boot-start-web基礎上引入spring-boot-starter-actuator即可。

 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

 

2.4 Spring cloud Config 配置中心

在我們實現微服務架構時,每個微服務節點都需要自身的相關配置數據項,當節點眾多,維護就變得非常困難,因此需要建立一个中心配置服務。

Spring Cloud Config分為兩部分。Spring Cloud Config server作為一個服務進程,Spring Cloud Config File為配置文件存放位置。

2.5 Spring cloud Eureka 服務註冊中心

服務註冊的概念早在微服務架構之前就出現了,微服務架構更是把原先的單一應用節點拆分成非常多的微服務節點。互相之間的調用關係會非常複雜,Spring Cloud Eureka作為註冊中心,所有的微服務都可以將自身註冊到Spring Cloud Eureka進行統一的管理和訪問(Eureka和Zookeeper不同,在AOP原則中選擇了OP,更強調服務的有效性)

2.6 Spring cloud Zuul 服務端智能路由

當我們把所有的服務都註冊到Eureka(服務註冊中心)以後,就涉及到如何調用的問題。Spring Cloud Zuul是Spring Cloud提供的服務端代理組件,可以看做是網關,Zuul通過Eureka獲取到可用的服務,通過映射配置,客戶端通過訪問Zuul來訪問實際需要需要訪問的服務。所有的服務通過spring.application.name做標識,

不同IP地址,相同spring.application.name就是一個服務集群。當我們增加一個相同spring.application.name的節點,Zuul通過和Eureka通信獲取新增節點的信息實現智能路由,增加該類型服務的響應能力。

2.7 Spring cloud Ribbon 客戶端智能路由

與Spring Cloud Zuul的服務端代理相對應,Spring Cloud Ribbon提供了客戶端代理。在服務端代理中,客戶端並不需要知道最終是哪個微服務節點為之提供服務,而客戶端代理獲取實質提供服務的節點,並選擇一個進行服務調用。Ribbon和Zuul相似,也是通過和Eureka(服務註冊中心)進行通信來實現客戶端智能路由。

2.8 Spring cloud Sleuth 分佈式追蹤

2.9 Spring cloud Zipkin 調用鏈

2.10 Spring cloud Feign http客戶端

Spring Cloud Feign是一種聲明式、模板化的http客戶端。 使用Spring Cloud Feign請求遠程服務時能夠像調用本地方法一樣,讓開發者感覺不到這是遠程方法(Feign集成了Ribbon做負載均衡)。

把遠程服務和本地服務做映射

@FeignClient(name = "rabbitmq-http", url = "${SKYTRAIN_RABBITMQ_HTTP}") 
public interface TaskService {     
    @RequestMapping(value = "/api/queues", method = RequestMethod.GET)     
    public String query(@RequestHeader("Authorization") String token); 
}

 

以調用本地服務的方式調用遠程服務

@Autowired 
private TaskService taskService; 
private String queryRabbitmqStringInfo() {     
    byte[] credentials = Base64 .encodeBase64((rabbitmqHttpUserName + ":" + rabbitmqHttpPassword).getBytes(StandardCharsets.UTF_8));     
    String token = "Basic " + new String(credentials, StandardCharsets.UTF_8);     
    return taskService.query(token); 
}

 

2.11 Spring cloud Hystrix 斷路器

三、微服務實踐

3.1 我們開發的幾個微服務組件—應用管理中心

應用管理中心可以對每個已經註冊的微服務節點進行停止,編譯,打包,部署,啟動的完整的上線操作。

3.2 我們開發的幾個微服務組件—zookeeper數據查詢中心

zookeeper數據查詢中心根據zookeeper地址,端口,命令獲取zookeeper數據信息。

3.3 我們開發的幾個微服務組件—微服務健康檢測中心

健康檢測中心周期性檢查每個微服務的狀態,當發現有微服務狀態處於DOWN或連接超時時,觸發報警。

3.4 我們開發的幾個微服務組件—定時任務查詢中心

// 在BeanPostProcessor子類中攔截
@Component
public class SkytrainBeanPostProcessor implements BeanPostProcessor, Ordered {
    ***
    /**
     * Bean 實例化之後進行的處理
     */
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        beanPostProcessor.postProcessAfter(bean, beanName);
        return bean;
    }
    ***
}
// 攔截后獲取定時任務註解
***
public Object postProcessAfter(Object bean, String beanName) {
    Class targetClass = AopUtils.getTargetClass(bean);
    Map annotatedMethods = MethodIntrospector.selectMethods(targetClass,
            new MethodIntrospector.MetadataLookup() {
 
                public Set inspect(Method method) {
 
                    Set scheduledMethods = AnnotatedElementUtils.getMergedRepeatableAnnotations(method,
                            Scheduled.class, Schedules.class);
                    return (!scheduledMethods.isEmpty() ? scheduledMethods : null);
                }
            });
    if (!annotatedMethods.isEmpty()) {
        String className = targetClass.getName();
        for (Map.Entry entry : annotatedMethods.entrySet()) {
            Method method = entry.getKey();
            for (Scheduled scheduled : entry.getValue()) {
                String key = className + ":" + method.getName();
                String value = scheduled.toString();
                taskInfos.put(key, value);
            }
        }
    }
    return null;
}
***
 
// 獲取定時任務后註冊
***
public void taskRegister() {
    String nodeInfo = ipAddress + ":" + serverPort + ":";
    try {
        /**
         * 定時任務
         */
        Map infos = taskInfos;
        for (Entry item : infos.entrySet()) {
            String taskId = nodeInfo + item.getKey();
            String taskParameter = item.getValue();
            JSONObject info = new JSONObject();
            info.put("taskId", taskId);
            info.put("taskParameter", taskParameter);
            info.put("applicationName", applicationName);
            info.put("taskType", "schedule");
            LOGGER.info(info.toString());
            zooKeeperExecutor.createZKNode(SKYTRAIN_TASK_ZKNODE_PREFIX + taskId, info.toString());
        }
    }
    catch (Exception ex) {
        LOGGER.error("", ex);
    }
}
***

 

3.5 微服務的分類

  • 微服務平台組件
  • 公共服務組件
  • 基礎服務組件/業務服務組件

3.6 整體微服務架構圖

作者:梁鑫

來源:宜信技術學院

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

Open Live Writer 微軟最好用離線編輯器開放原始碼!支援 WordPress、Blogger 等網誌平台

剛開始寫網誌時,我曾是微軟 Windows Live Writer(又被稱為 WLW)離線編輯器的忠實使用者,這部分我也在「我如何寫出一篇文章?每日必用的寫作相關軟體彙整」提過,若說是 Windows 中最好用的免費離線編輯器也不為過!也是少數會被使用者推崇的微軟產品,可惜最後一次大更新距今已過三年多時間,隨著 Windows Live Essentials 逐漸式微,它的前景令人擔憂。

不過好消息是微軟近期將 Windows Live Writer 開放原始碼後釋出,並重新取名為 Open Live Writer(OLW)!這項計畫的背後開發者為 .NET Foundation,也是積極推動開放原始碼發展的組織。其實早在去年 Scott Hanselman 便預告將 Windows Live Writer 開源的想法,直到今年底才正式推出第一個版本。

Open Live Writer 是一款桌面版網誌發佈應用程式,俗稱部落格離線編輯器,透過這項軟體可以在電腦上利用所見即所得(WYSIWYG)編輯器來撰寫文章、發佈相片、地圖等等。尤其一般網誌平台內建的編輯器都不是很好用,而且必須要在網路連線情況下才能使用,透過離線編輯器就如同在 Word 等文字處理軟體上工作,可以等到有網路時再將文章發送出去。

Open Live Writer 支援 WordPress、Blogger、TypePad 及 WordPress.com 等平台(未來會支援更多平台),當然所有使用 XML-RPC 協議的網誌平台也能連結,例如:痞客邦。

雖然仍未出現眾多使用者期待的 Mac 或 Linux 版,但能夠開放原始碼還是一件值得慶祝的事,代表日後會有志願者繼續維護這項專案,當然你也可以自由加入 GitHub 專案頁面來貢獻心力,或者免費下載 Open Live Writer 來做為你的部落格寫作工具。

軟體資訊

軟體名稱:Open Live Writer
軟體語系:英文
作業系統:Windows
官方網站:http://openlivewriter.org/
下載鏈結:官方網站免費下載

使用教學

STEP 1

從官方網站點選「Download」下載安裝程式,安裝後即可開始設定 Open Live Writer。

STEP 2

對於使用過 Windows Live Writer 的朋友應該不陌生,大致就是選擇你的網誌平台,然後設定網址、帳號密碼,連接後即可透過編輯器來撰寫文章,處理網誌上的文章內容。

設定好你的網誌網址、使用者名稱及密碼,透過 Open Live Writer 進行連接。如果你的平台無法被 Open Live Writer 識別,可能就要設定一個特定的網址,這部分要自己去爬文找找看設定教學。若是自己使用 WordPress 架站,那麼輸入網址就能抓到網站了。

Open Live Writer 延續 WLW 的特色,會將你的佈景主題複製下來,直接套用到離線編輯器上,這麼做的好處是當你離線寫作時,能即時知道文章發佈到網站上的樣子,這也是其他編輯器比較少做到的,非常方便的功能喔!

STEP 3

下圖是我使用 Open Live Writer 連結到我的部落格呈現出來的效果,可以看到編輯器變成了我部落格的網站樣式(黑色背景),同時在文字處理上也有相對應的樣式效果,使用時就跟在部落格上寫作的感覺很像。

OLW 的原始介面並沒有大幅度的修改和調整,保留大部分原有功能與設計。

若你正在使用 Windows Live Writer,或者打算重新安裝這套軟體,那麼你可能會想知道有沒有轉換成 Open Live Writer 的必要性呢?我的想法是有的,而且建議盡早升級轉換,因為 Windows Live Writer 已經有段時間沒有更新,說穿了是原有團隊已經不再繼續維護軟體,雖然還能正常使用,但不確定日後會不會發生問題。

Open Live Writer 是個延續這項軟體的開放原始碼計畫,會有更多人投入心力,提出好的點子(這也是開源優勢),可能不一定會立刻有什麼大轉變,但相信未來會成為更好的離線編輯器,也期待日後可以在 Mac 或 Linux 平台推出。

值得一試的三個理由:

  1. 最好用的 Windows Live Writer 網誌離線編輯器開放原始碼了!
  2. 命名為 Open Live Writer,現已放上 GitHub 頁面
  3. 延續 WLW 優良功能,新版已經修復無法連線 Blogger 的問題
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

Tap 免費 WordPress 架站空間,全管理式託管可安裝佈景主題外掛

近年來已經越來越多人捨棄 BSP(部落格服務提供商),轉而自己架設網站,畢竟價格和難度已不如以往,自架網站自由度高,可完整掌控網站的所有設定項目,使你在經營網站時能有更多調整空間。架設工具首推 WordPress,因為它非常簡單,而且在中文方面仍在持續維護更新,佈景主題及外掛資源也非常豐富,如果你想搬家,那麼我也推薦五個虛擬主機服務及 VPS,我還將租用到網誌備份匯入寫成一篇完整教學,只要照著做你也能輕鬆架站。

即便如此,仍然有許多人卻步而不知道該不該搬家或自架網站,或許在此之前,你可以先試試看 WordPress 的操作介面,再來考慮是否轉而投入 WordPress 平台。

本文要介紹這項服務「Tap」是一個全新的免費 WordPress 空間,更精確地說,它是一個全管理式虛擬主機(Managed WordPress hosting),若有租用過虛擬主機的話,應該對於這個名詞不陌生,「全管理式」虛擬主機空間讓你完全無須經手,你不用熟悉技術方面知識,操作上就如同一般網路服務那麼簡單。

但我使用後發現 Tap 其實更像是一個 WordPress Hosting(請參考:WordPress Hosting 架站空間精選,最多人推薦的五個國外虛擬主機方案),使用者只要在 Tap 上註冊帳戶,即可開啟 WordPress 網站,但跟 WordPress.com 或 Multisite 不同的是:每個網站都擁有最高權限,可隨時更新,或者安裝佈景主題、外掛,當然介面就跟自己架 WordPress 一樣。

不過要注意的是 Tap 分為兩種方案:免費及 Pro。付費方案每月 $5 美元,支援自訂網域名稱功能(Custom Domain),以及可使用 SFTP 來存取網站,也就是說若你使用免費方案,那麼只能使用 Tap 提供給你的子網域名稱(YourName.thisistap.com)。WordPress 可以直接在控制台內安裝外掛和佈景主題,所以 SFTP 部分就沒有影響,除非你想把一些檔案手動上傳到虛擬主機。

如果你想試試看自己架設 WordPress,但又擔心技術方面問題無法克服,Tap 或許是個不錯的折衷方案。當然 WordPress 本身有內建匯入匯出功能,你也可以很輕鬆地將其他網站的內容匯入,或者日後搬家,決定自架網站時再把 Tap 的內容匯出備份,不用擔心會被平台綁住而難以轉換。

網站名稱:Tap | Managed WordPress Hosting
網站鏈結:https://thisistap.com/

使用教學

STEP 1

開啟「Tap」網站後,點選網站中間的「Create My Free Site」來建立免費網站,註冊時需要填入你的姓名、Email 和密碼,勾選同意使用條款後就能取得帳號。

STEP 2

接著下一步,我們要在 Tap 平台內建立自己的 WordPress 網站,不過 WordPress 本身也有自己的安裝畫面,這裡只要設定你要使用的子網域名稱(YourName.thisistap.com),網站名稱及帳號密碼,但稍後在安裝 WordPress 時還會需要再輸入一次。

STEP 3

建立好網站後,你的 WordPress 網誌就會顯示在 Tap 的「My Sites」裡,那麼點選網站鏈結來繼續吧!(對了,如果你之後想要付費升級 Pro,也是在這個畫面點 Upgrade)

STEP 4

第一次開啟你的 WordPress 網站時會跳出安裝畫面,選擇語系將畫面拖曳到最下方,找到正體中文(繁體中文)選項,然後按「繼續」。

從這裡開始就是 WordPress 的範疇了,雖然它仍然是在 Tap 平台上,若有遇到任何使用上的問題,可以到 WordPress Taiwan 正體中文 Facebook 社團尋求協助。

設定相關資訊,包括網站標題、帳號、密碼、電子郵件等等,WordPress 安裝程式其實設計很簡單,只有簡單兩個步驟就能完成啦!安裝後會提示你開啟網站,或進入控制台。

STEP 5

在登入畫面輸入你在「安裝程式」(前一步驟)設定的帳號密碼,即可登入你的 WordPress 控制台,可以看到你能使用所有功能,包括新增文章、頁面、媒體,管理迴響,或者安裝佈景主題及外掛程式,以及管理帳號和設定網站等等。

WordPress 使用了最新的預設佈景主題。你可以從控制台來變更其他佈景主題,當然也可以自己安裝新的,不受限制。但免費版因為不提供 SFTP 功能,要安裝自己的佈景主題,必須先將整個資料夾壓縮成 Zip 檔,透過線上安裝的方式將它安裝到 WordPress。

STEP 6

最後,你就有一個自架的 WordPress 了!無論要做為一般生活記錄,或者設計成線上名片或個人網站,WordPress 都非常適合,不過如果想要長久經營,我建議還是申請一個網域名稱,付費升級 Pro 方案來設定自己的網址,這樣效果會比較理想。

或許有人會質疑 Tap 的穩定性,或者能否長久經營?我想無論是否使用此服務,或者自己租用虛擬空間來架設網站,基本上都會遇到類似問題,不過別擔心,Tap 允許使用者安裝外掛,那麼表示你也能夠使用外掛來備份內容(或者以內建的匯出工具),隨時將你寶貴的內容保存下來,當服務未來可能終止或不再繼續提供支援,也不會擔心內容無法轉出。

最好的方法還是建議註冊一個網址,未來要重起爐灶才不會又要重來。

值得一試的三個理由:

  1. 免費的「全管理式」空間(Managed WordPress Hosting)
  2. 可真正使用 WordPress 完整功能,包括自己安裝外掛、佈景主題
  3. 付費升級(每月 $5 美元)即可自訂網域名稱及使用 SFTP 功能
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計

帶您來看台北網站建置台北網頁設計,各種案例分享

廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

WordPress 桌面版應用程式免費下載!打造閱讀器、離線編輯及管理三合一體驗

前段時間 WordPress 發佈全新管理介面 Calypso,以桌面版應用程式形式提供使用者免費下載,創辦人 Matthew Mullenweg 認為,現今行動裝置非常流行,但一般撰寫或編輯文章仍多半侷限在電腦上進行,因此提供一個最佳化的部落格管理工具就顯得格外重要。這也促使 WordPress 持續獲得更多使用者。

WordPress.com 應用程式一開始只有 Mac 版,現在已延伸至 Windows 及 Linux ,搭配原有 iOS 及 Android 應用程式,幾乎可以說已經完成桌面端及行動裝置佈局。

本文要介紹新推出的 WordPress 應用程式,或者你可以稱它為部落格軟體,這個應用身兼三大功能:閱讀器、離線編輯器及管理工具!以往這三個部分要透過不同服務或軟體來達成,現在,WordPress 原生應用程式就能做到。將資訊來源及內容生產整合在一起,可以說是目前看過最強大的產生力工具。

除此之外,重頭戲仍擺在這次的 Calypso 更新,眾所皆知 WordPress 有非常易用且功能完整的控制台(WP-Admin),但每次要進行操作都必須登入網站,有時候不是那麼方便。WordPress 讓你能直接從桌面端來管理多個網站,全新設計的控制台有非常流暢的操作速度,在管理上更為輕鬆簡單。

不過 WordPress 應用程式最大特色是:可以拿來做為離線編輯器使用!

以往你可能會使用第三方離線編輯器來寫文章,例如:Open Live Writer,因為使用內建文章編輯器並不是那麼方便。在 WordPress 應用程式中,你可以透過全新可視化編輯器來寫文章,內建自動草稿儲存、插入圖片、設定分類與標籤及發佈等功能。

WordPress 應用程式不限於 WordPress.com 使用,如果你是採 WordPress.org 開放原始碼程式自行架站,安裝 Jetpack 一樣能夠支援。這是一款由 Automattic(WordPress 母公司)開發的外掛程式,包含幾項我曾介紹過的功能:

  • Photon 免費 CDN 圖片分流加速服務
  • Jetpack Monitor 免費 24/7 網站監測服務,網站無法連線自動提醒
  • 啟用 Jetpack「單一登入」機制教學,讓你的 WordPress 網站更安全

當然,如果你是使用 WordPress.com 免費部落格服務,只要下載應用程式,登入你的帳號密碼,即可讓軟體與你的部落格連線。

軟體資訊

軟體名稱:WordPress.com 桌面應用程式
軟體語系:多國語言
作業系統:Windows、Mac、Linux
官方網站:https://desktop.wordpress.com/
下載鏈結:官方網站免費下載

使用教學

STEP 1

開啟 WordPress.com 應用程式後,輸入你的使用者名稱、密碼來登入,這裡要輸入的不是你網站的登入帳號密碼,而是網站所連結的 WordPress.com 帳號資訊。

若你是使用 WordPress 自行架站,點選下方「Add self-hosted site」取得更多資訊。

STEP 2

WordPress.com 應用程式的預設畫面為「讀取器」,也就是前面提到的閱讀器。在這裡可以將你喜歡的網站內容加入「關注」,WordPress 會推薦你可能有興趣的相關網站內容。你還可以新增清單、加上標籤來分類不同的網站主題。

在閱讀器裡,你可以新增任何有 RSS Feed 功能的網站,不限於 WordPress 類型。

STEP 3

WordPress.com 應用程式的另一個特色是可以隨時收到通知。它就像一般軟體,當有人關注你,在你的網站按讚或留言,它會立即跳出提示讓你知道。

STEP 4

這個應用程式的亮點應該是管理功能,或許你之前在網頁端試用過,軟體把操作介面帶到桌面端,讓你不用從瀏覽器就能進行網站管理,包括新增文章頁面,或是更新升級佈景主題及外掛等等(必須從 Jetpack 開啟「Manage」模組才能用)。

不過我最喜歡的是 WordPress.com 的統計功能(Stats),它會清楚記錄下每天的網站流量變化,包括最熱門的文章頁面、來源網址、國家等資訊,相較於 Google 分析來說,內建的統計資料更為清楚易懂。

STEP 5

前面介紹有提到:WordPress 桌面版應用程式本身就是一個離線編輯器!現在,你可以直接在桌面端透過官方軟體來撰寫文章。

應用程式的編輯器功能非常好用,不但速度快、設計簡單大方,也和 WordPress 有更緊密的結合,因為它已經加入了網站相關設定,例如分類與標籤、特色圖片、分享等功能。

下圖是我使用 WordPress.com App for Windows 桌面版來寫文章的畫面擷圖,可以看到相較於原先網頁編輯器來說,桌面版設計更為乾淨明亮,讓你在寫文章時有更好的寫作體驗(如果常常苦思得不到靈感,就會知道這有多麼重要…)。

這個編輯器的另一特色是:無須連上網路,具備自動儲存草稿功能。若你正在尋找一款免費、好用的部落格寫作工具,WordPress.com App 會是非常棒的選擇!

WordPress 本身只是一個開放原始碼的 PHP 程式,用於架設網站部落格,但憑藉外掛功能,讓它延伸擴展更多更不一樣的變化!Matthew Mullenweg 始終相信開放相較於封閉有更多的好處,WordPress 彈性自由更可以適應不斷變化的網路環境。

這款 WordPress.com 桌面版應用程式耗時二十個月,由來自世界各地的開發者貢獻而生,相信它能跟上接下來的發展趨勢,讓我們有更為便利的數位寫作工具!

值得一試的三個理由:

  1. 開放原始碼,提供 Windows、Mac、Linux 三大平台免費下載
  2. 更好用的寫作工具,將重心聚焦於內容
  3. 速度快、操作簡單,使用現今最流行開發項目
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

Imagify 免費線上圖片壓縮服務,三種模式切換壓縮比畫質

我習慣圖片上傳到網路前先手動壓縮處理,這麼做可以大幅節省上傳時間、降低容量,最大優點是使用者開啟網站載入圖片速度更快,也能更省流量。在壓縮工具方面,我傾向使用線上服務,關於這部分曾在「我如何寫出一篇文章?每日必用的寫作相關軟體彙整」文章做過介紹,TinyJPG 是我目前首要選擇,它前陣子也推出了 WordPress 外掛。

本文要介紹的 Imagify 是我私藏許久,本來不打算拿出來介紹的圖片壓縮工具,因為嚴格來說它並不是一款免費服務,Imagify 是一個 WordPress 外掛,可在使用者上傳圖片時,利用遠端伺服器來進行圖片壓縮最佳化,是你想獲得更小尺寸圖片又不損失畫質的好選擇。

Imagify 除了外掛,也提供線上圖片壓縮功能,這也是本文想推薦給大家的好工具。Imagify 有三種壓縮模式調整(讓你選擇要壓縮的程度以及是否破壞畫質),免費帳戶單張圖片不超過 5 MB 限制,最佳化圖片會保存一小時,你必須在刪除前把圖片手動下載下來。

網站名稱:Imagify
網站鏈結:https://imagify.io/optimizer/

使用教學

STEP 1

首先,開啟 Imagify 網站,選擇上方的「Try for Free」功能,會看到如下畫面,簡單介紹一下如何使用,很簡單,只要在左側選擇你要的壓縮模式、輸出設定(必須註冊),然後把圖片拖曳到右邊框框,就能開始壓縮。

STEP 2

Imagify 有三種壓縮模式:Normal、Aggressive 和 Ultra,預設為 Aggressive。

Normal 為無損壓縮,不會破壞原有圖片的畫質,但壓縮程度有限;Aggressive 會對圖片產生些許破壞,不過肉眼幾乎看不出來,能讓圖片獲得最好的壓縮效果。Ultra 將壓縮發揮到極致,讓你有最小的圖片容量,但會對圖片造成損壞。

如果沒有特殊需求,通常使用 Aggressive 就可以了。

STEP 3

最後把圖片拖曳到右邊欄位,Imagify 就會使用它們的演算法來進行壓縮處理。壓縮後圖片會出現在下方,同時顯示原有檔案大小、最佳化大小、總共節省下來的百分比。

點選圖片最後面的「Download」可下載最佳化後的圖片,或者點選「Download All Optimized Files」將所有圖片打包下載。

如果你覺得 Imagify 不符合你的需求,或者想試試看其他類似工具,可參考以下:

  • Compressor.io 線上將圖片壓縮 90%,但不減損畫質(支援 JPEG、PNG、GIF、SVG)
  • Optimizilla 線上壓縮 JPG、PNG 圖片,不降低畫質有效減少檔案大小
  • PP鴨:為你的圖片壓縮減肥!在維持畫質情況下有效減少圖片大小

值得一試的三個理由:

  1. 免下載或安裝軟體,透過瀏覽器即可進行圖片壓縮
  2. 三種壓縮模式,可調整壓縮比例和畫質
  3. 將最佳化圖片一鍵打包下載
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

ShortPixel 免費圖片壓縮服務!支援四大相片格式,無失真最高 90% 壓縮比

上個月我介紹過一款個人非常推薦的 Imagify 免費線上圖片壓縮服務,內建三種模式可切換壓縮比畫質,在文章中提到這其實並非免費服務,嚴格來說是一款 WordPress 外掛功能,當使用者在上傳圖片時,就能利用遠端伺服器來自動進行圖片最佳化功能,但很可惜這項服務並非完全免費,我們僅能使用它的線上圖片壓縮工具來達成相同目的,和 TinyPNG 類似,雖然無法全自動處理,但仍比直接上傳原圖來得好一些。

如果你是使用 WordPress 架站,又希望能利用外掛功能來對文章內的圖片自動壓縮、最佳化以節省檔案大小,本文要介紹的 ShortPixel 就是個可以考慮的選擇,ShortPixel 是一項線上圖片最佳化服務,或者可以說主要用於「加速你的網站」,提高使用者載入頁面速度。

ShortPixel 包含失真與不失真的可用壓縮方式,最高可壓縮達 90% 大小!支援圖片格式包括 JPG、PNG、GIF 和 PDF,並提供 WordPress 外掛程式免費下載。若不是使用 WordPress 架站,一樣能透過 ShortPixel 線上圖片壓縮工具來對圖片壓縮及最佳化。

ShortPixel 依照使用者每月的圖片壓縮用量分為免費及付費方案,若透過免費資源網路社群的推薦鏈結進行註冊,可以免費額外再獲得 100 張(每月)配額升級!也就是每月可以壓縮圖片量為 200 張,對於一般網站來說其實是非常足夠的,要如何開始呢?請繼續往下看下去吧!

網站名稱:ShortPixel
網站鏈結:https://shortpixel.com/ (推薦鏈結,可額外獲得 100 張配額)

使用教學

STEP 1

開啟 ShortPixel 網站後,有一個網站圖片最佳化的快速測試工具,輸入你的網站網址,它就能幫你計算出壓縮前後可節省的網頁百分比,從下圖能看到,如果我使用 ShortPixel 來壓縮免費資源網路社群的圖片,可以再減少 41% 的網頁大小!

STEP 2

點選上方的「Compress」開啟線上圖片壓縮工具,在這裡無須註冊,直接將圖片拖曳到網頁中就能夠遠端來進行相片壓縮,支援格式 JPEG、PNG 和 GIF,單檔不能超過 10 MB 大小。當然如果你想使用 ShortPixel 提供的 WordPress 外掛程式,為媒體庫裡的圖片進行最佳化,請記得先註冊一下帳號。

STEP 3

把圖片拖曳到 ShortPixel 線上壓縮器後,圖片就會開始上傳、最佳化,完成後每張相片下方會有原始大小、壓縮後的大小比較,看起來壓縮技術非常強大,幾乎有 80% 左右的壓縮比表現!

點選壓縮後的圖片,開啟 Compare Images 圖片比較工具,中間捲軸將原始圖片及壓縮後的圖片分成左右兩邊,可以移動一下滑鼠來看看壓縮前後的效果比較,應該很難發現圖片差異(無失真壓縮),但神奇的是圖片容量竟然已經大幅降低了!

STEP 4

點選圖片下方的「下載」圖示,就能把壓縮圖片下載到電腦中保存或使用,比較可惜的是 ShortPixel 並未提供打包批次下載,只能一張一張將圖片下載下來。

STEP 5

最後,如果你使用 ShortPixel 外掛程式來壓縮網站圖片,可在控制台內看到目前剩餘圖片張數(以及配額重置時間),簡單來說,ShortPixel 提供免費帳戶一個月 100 張圖片壓縮配額,搭配上免費資源網路社群推薦鏈結,單月可使用的配額是 200 張!

值得一試的三個理由:

  1. 包含失真及無失真壓縮模式,最高減少 90% 圖片大小
  2. 支援格式包括 JPG、PNG、GIF 和 PDF
  3. 提供 WordPress 外掛免費下載使用
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計

帶您來看台北網站建置台北網頁設計,各種案例分享

廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

Hostinger 頂級免費虛擬主機推薦,練習架站最佳 PHP、MySQL 平台

雖然免費資源網路社群有免費網站空間分類,但讀者會發現,我已經很久沒有介紹免費虛擬主機服務,原因很簡單,因為太多免空到後來都變得極為不穩定,甚至無預警關閉服務,對於架站者來說,辛苦經營網站被停用,不僅損失寶貴內容,更是對於免費服務劃上一個大大的問號。因此我會建議真正想架站的朋友花點錢去租用虛擬主機,尤其現在價格相較於幾年前來說已經非常實惠,搭配申請網域名稱可能每個月只要幾百元左右就能輕鬆架站。

不過還是很多人跑來問我:有沒有推薦的免費虛擬主機呢?如果你純粹想練習架站,又不想要花錢(或者想先試試看 WordPress 或其他架站程式是不是合乎你的需求),本文要來介紹一個老牌頂級免費虛擬主機服務。

Hostinger 是一個在全球超過 35 個國家提供免費虛擬主機的公司,旗下還有幾個可能你曾經見過的經銷主機(Reseller Hosting,例如 YouHosting)、帳務管理、VPS 和網站建置服務。Hostinger 提供免費內建 PHP、MySQL 架站空間,預設 2000 MB(2 GB)空間、每月 100 GB 流量限制,最棒的是具備中文介面,而且沒有任何廣告!

或許你曾經聽過或使用過 cPanel 主機,Hostinger 就是一個客製化 cPanel 控制台,可以在平台上使用各項功能。本身也提供付費升級,只要支付費用就能獲得無限制空間。之所以會想介紹 Hostinger ,除了有很簡單易懂中文控制台,內建一鍵快速安裝各種程式功能,讓你在架站時更快、更順暢,也能將資料庫匯出,將網站搬移到其他空間。

不過還是要再次提醒:Hostinger 並非長久之計!如果你想要認真經營網站、部落格,或是想透過架站來協助你達成某些目的,那麼最終仍要走上付費服務一途,不過相較於其他免費空間來說,Hostinger 無論在速度或穩定性都值得一用。本文會介紹如何申請 Hostinger 以及透過它來架設一個中文 WordPress 網站。

網站名稱:Hostinger
網站鏈結:http://www.hostinger.com.hk/

使用教學

第一步,申請 Hostinger 免費版帳號

開啟 Hostinger 中文版網站後,會有簡體中文版介面,雖然 Hostinger 在全世界很多國家都有提供在地化語言網站,但其實功能操作上並沒有太大不同。點選首頁的「現在訂購」就能開始申請帳號。

申請時直接以 Google 帳號登入,或者輸入姓名、Email 及密碼來註冊帳號。

註冊後必須先到信箱收取 Email,點選信中的確認鏈結才能啟用帳號,跟一般我們熟悉的網路服務相同。啟用帳號後點選藍色「主機」下方的「新主機」來開啟第一個空間。

第二步,開啟第一個 PHP、MySQL 網站空間

申請帳號後 Hostinger 不會自動幫你建立主機帳號,因此要點選「新主機帳號」按鈕來開啟新帳號,在這裡可以點選右上角來切換語言,Hostinger 提供繁體中文,不過預設情況下是使用簡體中文。

Hostinger 提供免費版、高級版和商業版三種套餐組合,在這裡選擇「免費版」繼續。如果你需要更多的空間或流量限制、SSH 或選擇更穩定的伺服器節點,可以付費升級。

接著設定一個要使用的免費二級網域名稱,Hostinger 提供一些簡短後綴,或者你也可以切換回一級域名來綁定自己申請的網址,之後再把 DNS 對應到 Hostinger 就能使用。

免費方案只能選擇位於英國的伺服器區域,速度上可能相較於美國來說會慢一些,不過整體來說還算穩定,付費的話可選擇包括美國、新加坡、巴西及俄羅斯在內等其他區域。最後設定好密碼就能建立免費空間。

在確定送出申請表單前,Hostinger 會要求使用者輸入你申請帳號的用途,可以寫一些你要架設網站目的、類型或相關原因。因為 Hostinger 每天收到超過兩萬封免費空間申請,為了過濾嚴重的濫用情形會多一道審核程序。

我在申請後 Hostinger 空間就立即開通,狀態顯示為「已激活」就表示可以使用啦!

第三步,使用 Hostinger 架設 WordPress 網站教學

點選你的空間會開啟更多功能,包括「管理」、「自助建站」、「一鍵安裝助手」以及比較少人用到的「E-mail」,點選「管理」就能開啟 cPanel 控制台,不過在這裡我要先示範如何快速安裝一個 WordPress 網站,我們點選「一鍵安裝助手」來開啟快速架站功能。

如果有用過 cPanel 的話,應該知道它有提供快速架站工具,內建許多常見與不常見的開放原始碼專案程式,能讓我們快速建置出 CMS、部落格、討論區或其他服務,從中找出我們要使用的 WordPress,點選來進行安裝。

設定一下安裝路徑、語言(可以選擇臺灣,有正體中文)、管理員帳號密碼、E-mail,網站標題跟標語之後可以隨時再做修改調整,最後點選「安裝」就能自動架站。

不得不說 Hostinger 或類 cPanel 網站空間的自動化架站程式非常好用,只要幾秒鐘時間就能把 WordPress 網站架設完成!在網址後面加上 /wp-admin/ 可以開啟控制台,不過你會先遇到登入畫面,輸入剛才安裝時設定的管理員帳號密碼。

從 WordPress 後台就能對網站進行完整操控,包括更換佈景主題、安裝外掛功能、加入新帳號,以及新增文章、頁面、媒體等等,Hostinger 快速架站功能會在安裝後內建一些外掛程式,不需要的話可以把它停用移除(沒想到還內建兩階段功能的 Clef ,我曾經有寫過專文來介紹這個外掛)。

現在,你就簡單架設好一個 WordPress 網站了!

延伸閱讀:

  • WordPress 桌面版應用程式免費下載!打造閱讀器、離線編輯及管理三合一體驗
  • 殺手級 WordPress 體檢項目:101 個建立新網站的超簡易捷徑!
  • 安裝 WordPress 後你應該做的 25 件事
  • 11 個強化 WordPress 網站安全的 .Htaccess 設定技巧

後記

前面有提到,Hostinger 本身已有一個客制化的 cPanel 控制台,因此使用者可以很方便快速地從控制台進行虛擬主機相關操作,不僅限於架設 WordPress,若是其他的開放原始碼程式或單純的 HTML 網站都能勝任。

如果你不常接觸這類的架站平台,cPanel 是個很容易上手的選擇,之後若要租用其他付費主機,也可以尋找使用 cPanel 控制台的服務。

另外,Hostinger 已經支援最新的 PHP 7.0,我建議可以從控制台的「高級 -> PHP 版本切換」來進行設定,將它選擇到 PHP 7 以獲得更好的速度及效能。

最後,如果你想使用 Hostinger 架站,請務必要備份好自己的檔案,因為免費空間並不會保障你的使用權益,且可能因為不夠穩定或任何因素而發生問題,若有備份的話,就能隨時搬遷到其他虛擬主機上。此外,我也建議無論如何都要註冊一個網域名稱,未來當你搬移空間時就不用重新開始啦!

  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

Flask學習之旅–數據庫

一、寫在前面

  在Web開發中,數據庫操作是很重要的一部分,因為網站的很多重要信息都保存在數據庫之中。而Flask在默認情況下是沒有數據庫、表單驗證等功能的,但是可以用Flask-extension為Web應用添加這些功能。

 

二、Flask SQLite

  SQLite是一款輕型的數據庫,是遵守ACID的關係型數據庫管理系統。由於Python對SQlite有內置的支持,因此在Flask應用程序中和SQLite進行交互是比較容易的。

  首先需要創建一個SQLite數據庫“user.db”,並在其中創建一張用戶表。代碼如下:

1 import sqlite3 2 
3 
4 conn = sqlite3.connect("user.db") 5 print("Connected!") 6 
7 conn.execute("CREATE TABLE USER(username TEXT, password TEXT, EMAIL TEXT)") 8 print("Table created successfully!") 9 conn.close()

  這裏就不貼HTML代碼了,就是一個註冊頁面,在註冊的時候會將用戶輸入的用戶名、密碼和郵箱傳到後台。在app.py中需要導入sqlite3模塊,然後連接前面創建的user.db,在建立連接之後創建一個游標對象,然後編寫SQL語句進行數據庫操作,整個過程都算是比較容易的。app.py中的代碼如下:

 1 from flask import Flask, render_template, request  2 import sqlite3 as sql  3 
 4 app = Flask(__name__)  5 
 6 
 7 @app.route('/register', methods=['GET', 'POST'])  8 def register():  9     if request.method == 'GET': 10         return render_template('register.html') 11     else: 12         msg = ""
13         try: 14             username = request.form["usr"] 15             password = request.form["pwd"] 16             email = request.form["email"] 17             print(username, password, email) 18             with sql.connect("user.db") as con: 19                 cur = con.cursor() 20                 cur.execute("INSERT INTO USER (username, password, email) VALUES (?,?,?)", 21  (username, password, email)) 22  con.commit() 23             msg = "註冊成功!"
24         except: 25  con.rollback() 26             msg = "註冊失敗!請重試!"
27         finally: 28  con.close() 29             return render_template('register.html', msg=msg) 30 
31 
32 if __name__ == '__main__': 33     app.run()

 

三、Flask SQLAlchemy

  Flask-SQLAlchemy是Flask擴展,它將對SQLAlchemy的支持添加到Flask應用程序中。在Flask Web應用程序中使用原始SQL對數據庫執行CRUD操作可能很繁瑣,不過SQLAlchemy 為應用程序開發人員提供了SQL的全部功能和靈活性。它是一個對數據庫的抽象,讓開發者不用這些編寫SQL語句,而是使用其提供的接口去操作數據庫,這其中涉及到一個非常重要的思想:ORM(Object Relation Mapping,對象關係映射),主要的功能是實現模型對象到關係型數據庫數據的映射。說白了就是使用通過對象去操作數據庫。

1.Flask-SQLAlchemy安裝

  使用pip install flask-sqlalchemy進行安裝。不過在安裝的時候可能會出現如下錯誤:

pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host=’files.pythonhosted.org’, port=443): Read timed out.

  這是因為在下載python庫的時候,由於國內網絡原因,導致python包的下載速度非常慢,查看pip 文檔,只要在 pip的時候控制超時即可, 具體參數為 –default-timeout=100, 後面的時間可以自己指定。因此可以用如下命令進行下載安裝:

pip install –default-timeout=100 flask-sqlalchemy

2.Flask-SQLAlchemy配置

  從此模塊導入SQLAlchemy類,創建一個Flask應用程序對象併為要使用的數據庫設置URI的代碼如下:

from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)

# URI的格式為:用戶名:密碼@ip地址:端口號(默認可以不寫)/數據庫名
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:qwer1234@localhost/flask"

3.配置的時候可能出現的問題及解決辦法

1)ModuleNotFoundError: No module named ‘MySQLdb’

解決辦法:

  使用pymysql模塊,URI改為:

app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:qwer1234@localhost/flask"

2)Warning: (1366, “Incorrect string value: ‘\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA…’ for column ‘VARIABLE_VALUE’ at row 481”)

解決辦法:

  改用mysql-connector,使用pip install mysql-connector下載安裝,URI改為:

app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+mysqlconnector://root:qwer1234@localhost/flask"

3)sqlalchemy.exc.NotSupportedError: (mysql.connector.errors.NotSupportedError) Authentication plugin ‘caching_sha2_password’ is not supported

解決辦法:

  出現這個錯誤是因為MySQL8.0採用了Use Strong Password Encryption for Authentication即強密碼加密,而mysql.connector的引擎不支持caching_sha2_password的加密格式,所以解決思路有如下幾種:

  (1)重裝MySQL,在Authentication Method中選擇第二項(重裝比較麻煩,我就沒有嘗試):

  (2)在client端,將加密格式選擇成mysql_native_password,命令如下(個人嘗試后無效):

ALTER user ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘root’

  (3)最後一種是我自己摸索出來的,就是在URI設置的時候加上一個參數auth_plugin並設置為mysql_native_password:

app.config[‘SQLALCHEMY_DATABASE_URI’] = “mysql+mysqlconnector://root:qwer1234@localhost/flask?auth_plugin=mysql_native_password”

4.Flask-SQLAlchemy的基本操作

1) 常用查詢過濾器:

  過濾器得到的還只是一些對象,需要使用執行器來獲取真正的數據。

filter(): 把過濾器添加到原查詢上,返回一個新查詢,需要使用模型類名去獲取字段來進行比較;

filter_by():把等值(只能使用=比較操作)過濾器添加到查詢上,返回一個新查詢;

order_by():根據指定條件對查詢結果進行排序,返回一個新查詢;

group_by():根據指定條件對原查詢結果進行分組,返回一個新查詢。

2.)常用查詢執行器

all():以列表的形式返回查詢的所有結果;

first():返回查詢的第一個結果;

first_or_404():同first(), 只不過如果沒有找到的話,返回404錯誤;

get():返回指定主鍵對應的行;

get_or_404():返回指定主鍵對應的行,如不存在,返回404錯誤;

count():返回查詢結果的數量;

paginate():返回一個Paginate對象,包含指定範圍內的結果。

3.)查詢條件

startswith('xx'):查詢以xx開頭的所有數據;

endswith('xx'):查詢以xx結尾的所有數據;

not_():取反;

and_():返回and()條件滿足的所有數據;

or_():返回or()條件滿足的所有數據。

5.使用示例

  app.py中代碼如下:

 1 from flask_sqlalchemy import SQLAlchemy
 2 import mysql.connector
 3 
 4 
 5 app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+mysqlconnector://root:qwer1234@localhost/flask?auth_plugin=mysql_native_password"
 6 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
 7 app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
 8 
 9 
10 # 獲取SQLAlchemy實例對象
11 db = SQLAlchemy(app)

  然後新建一個model.py,編寫如下代碼進行測試:

 1 from app import db
 2 
 3 
 4 # 創建模型對象
 5 class User(db.Model):
 6     __tablename__ = "users"
 7     id = db.Column(db.Integer, primary_key=True)
 8     username = db.Column(db.String(16), unique=True)
 9     password = db.Column(db.String(16))
10     email = db.Column(db.String(32), unique=True)
11 
12     def __repr__(self):
13         return '<User %r>' % self.username
14 
15 
16 # 1.創建表
17 db.create_all()
18 print("Created Successfully!")
19 
20 # 2.增加記錄
21 usr1 = User()
22 usr1.id = 1
23 usr1.username = "wang"
24 usr1.password = "wangwang"
25 usr1.email = "wang@163.com"
26 usr2 = User(id=2, username="yang", password="yang", email="yang@163.com")
27 db.session.add(usr1)
28 print("Add usr1")
29 db.session.add(usr2)
30 print("Add usr2")
31 db.session.commit()
32 
33 # 3.查詢記錄,注意查詢返回對象,如果查詢不到返回None
34 users1 = User.query.all()  # 查詢所有
35 print(users1)
36 print("User Count:", len(users1))
37 
38 # 4.刪除
39 user = User.query.get(1)
40 db.session.delete(user)
41 print("Delete usr1")
42 db.session.commit()
43 
44 users2 = User.query.all()  # 查詢所有
45 print(users2)
46 print("User Count:", len(users2))

  運行結果如下所示:

Created Successfully!
Add usr1
Add usr2
[<User ‘wang’>, <User ‘yang’>]
User Count: 2
Delete usr1
[<User ‘yang’>]
User Count: 1

 

【精選推薦文章】

自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

.NET中擴展方法和Enumerable(System.Linq)

LINQ是我最喜歡的功能之一,程序中到處是data.Where(x=x>5).Select(x)等等的代碼,她使代碼看起來更好,更容易編寫,使用起來也超級方便,foreach使循環更加容易,而不用for int..,linq用起來那麼爽,那麼linq內部是如何實現的?我們如何自定義linq?我們這裏說的linq不是from score in scores  where score > 80 select score;而是System.Linq哦。了解Ling之前先要了解擴展方法,因為linq的實質還是擴展方法。

擴展方法

擴展方法使你能夠向現有類型“添加”方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。 擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用。 

例如:

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static int WordCount(this string str)
        {
            return str.Split(new char[] { ' ', '.', '?' }, 
                             StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }   
}
//添加引用
using ExtensionMethods;  
//使用
string s = "Hello Extension Methods";  
int i = s.WordCount();  

微軟擴展方法建議

微軟MSDN上的建議:通常,建議只在不得已的情況下才實現擴展方法,並謹慎地實現。只要有可能,都應該通過創建從現有類型派生的新類型來達到這一目的。

擴展方法建議

1. 當功能與擴展類型最相關時,可以考慮使用擴展方法。
2. 當對第三方庫進行擴充的時候,可以考慮使用擴展方法。
3. 當您不希望將某些依賴項與擴展類型混合使用時,可以使用擴展方法來實現關注點分離。
4. 如果不確定到底使用還是不使用擴展方法,那就不要用。

擴展方法是C#語言的一個很好的補充,她使我們能夠編寫更好,更容易讀的代碼,但是也應該小心使用,不恰當的使用擴展方法可能導致可讀性降低,使測試困難,容易出錯。

System.Linq

System.Linq用起來那麼好,她內部是如何實現的,當然是查看源碼了。

Where源碼

public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
    if (source == null) throw Error.ArgumentNull("source");
    if (predicate == null) throw Error.ArgumentNull("predicate");
    if (source is Iterator<TSource>) return ((Iterator<TSource>)source).Where(predicate);
    if (source is TSource[]) return new WhereArrayIterator<TSource>((TSource[])source, predicate);
    if (source is List<TSource>) return new WhereListIterator<TSource>((List<TSource>)source, predicate);
    return new WhereEnumerableIterator<TSource>(source, predicate);
}

這個方法就是一個擴展方法,對數據進行了處理,具體的處理都是在對象中的MoveNext中

public override bool MoveNext() {
    if (state == 1) {
        while (index < source.Length) {
            TSource item = source[index];
            index++;
            if (predicate(item)) {
                current = item;
                return true;
            }
        }
        Dispose();
    }
    return false;
}

可以看出就是一個循環處理,如果你覺得還是不清楚,可以看WhereIterator方法

static IEnumerable<TSource> WhereIterator<TSource>(IEnumerable<TSource> source, Func<TSource, int, bool> predicate) {
    int index = -1;
    foreach (TSource element in source) {
        checked { index++; }
        if (predicate(element, index)) yield return element;
    }
}

這下明白了,linq就是擴展方法,對數據進行處理,返回所需要的數據,知道了原理之後,可以寫自己的linq擴展方法了。
我想寫一個帶有控制台輸出的Where擴展方法

public static IEnumerable<TSource> WhereWithLog<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
    if (source == null)
    {
        throw new ArgumentNullException("source", "不能為空");
    }

    if (predicate == null)
    {
        throw new ArgumentNullException("predicate", "不能為空");
    }


    int index = 0;
    foreach (var item in source)
    {
        Console.WriteLine($"Where item:{item},結果:{predicate(item)}");
        if (predicate(item))
        {
            yield return item;
        }
        index++;
    }
}

實現一個打亂數據的擴展方法,這裏的方法用了約束,只能是值類型。

public static IEnumerable<T> ShuffleForStruct<T>(this IEnumerable<T> source) where T : struct
{
    if (source == null)
        throw new ArgumentNullException("source", "不能為空");

    var data = source.ToList();
    int length = data.Count() - 1;
    for (int i = length; i > 0; i--)
    {
        int j = rd.Next(i + 1);
        var temp = data[j];
        data[j] = data[i];
        data[i] = temp;
    }

    return data;
}

到此為止是不是覺得Enumerable中的方法也就是那麼回事,沒有那麼難,我也可以實現。

【精選推薦文章】

智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計

帶您來看台北網站建置台北網頁設計,各種案例分享

廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益