<wbr id="r89mi"><small id="r89mi"></small></wbr>
      1. <wbr id="r89mi"><small id="r89mi"></small></wbr>
        <video id="r89mi"></video>
      2. <wbr id="r89mi"><small id="r89mi"><tr id="r89mi"></tr></small></wbr>
          <video id="r89mi"></video>
          <wbr id="r89mi"><small id="r89mi"><tr id="r89mi"></tr></small></wbr>
          <video id="r89mi"><address id="r89mi"></address></video>
          <wbr id="r89mi"></wbr><wbr id="r89mi"><small id="r89mi"><tr id="r89mi"></tr></small></wbr>
          當前所在位置: 巧兔教學 > 生活常識 >

          編寫web工程的流程

          發布時間:2023-02-14 09:41 作者:千鋒重慶 點擊: 【 字體:

          編寫web工程的流程?如果你對這個不了解,來看看!

          web前端開發學習流程是什么?,下面一起來看看本站小編千鋒重慶給大家精心整理的答案,希望對您有幫助

          編寫web工程的流程1

            前端開發行業的發展俘獲了很多小伙伴的青睞,隨著前端開發行業的不斷發展,對前端開發工程師的需求量越來越大,越來越多的小伙伴通過web前端開發培訓成為一名專業的前端開發工程師。那么,培訓學習的內容是什么?如何才是科學的學習路線呢?

            小伙伴在前端培訓班不僅能夠系統的學習相關的前端開發技術知識,還能夠積累更多的項目實戰經驗,為小伙伴日后找工作奠定了一定的基礎。所以,對于所有想要學習前端開發的人來說,學習的課程安排是至關重要的。我們一起來看看科學的學習路線是怎樣的。

          專業的web前端開發培訓的學習流程

            1、HTML的學習

            這部分內容學習結束后,可以自己搭建一個個人網站,練習的同時也能提高自己的自信心。

            2、CSS樣式的學習

            如果小伙伴想要將自己的網站設計的很漂亮,那不得不學習CSS樣式,這部分內容的學習可以將HTML代碼規范化和模塊化,而且還可以通過css樣式的修改來改變網頁的設計風格,因此css就像是html的樣式設計者。

            3、JavaScript的學習

            這部分內容頗為復雜,涉及到的內容也比較多,當然它的功能也更為復雜,可以寫邏輯代碼,能夠完成大量的控制功能。

            4、各種前端框架的學習

            這部分內容就比較多了,現在流行的框架也比較多,比如Bootstrap,Foundation等,這部分在今后的工作中會廣泛的使用,所以在打好前三個核心基礎技術的前提下,前端框架的學習會使你的等階上升一個臺階。

            5、真實項目實戰

            如今企業需要的是擁有項目經驗的技術開發人才,所以真實項目的實戰訓練是非常有必要的,為小伙伴日后找工作奠定了一定的基礎。

          如果你對前端開發學習感興趣,還可閱讀:重慶前端開發培訓有前景嗎?前端開發熱門趨勢在哪里? - 千鋒教育

          編寫web工程的流程2

          如果您是 web3 開發的新手,那么這是開始的地方!

          智能合約構成了構建在區塊鏈上的所有 dApp 的基礎,它們通常使用自定義語言編寫,例如 Solidity(用于 Ethereum)或 Cadence(用于 Flow)。

          它們往往比傳統程序簡單得多,但風險要高得多 - 單個智能合約錯誤可能導致數百萬美元在幾分鐘內耗盡!

          您將在本課程中培養哪些技能?我們將引導您完成編寫和部署您的第一個智能合約所需的工具,包括:

          • ? Metamask: [1]用于與以太坊區塊鏈交互的軟件加密貨幣錢包,允許您支付 gas 費用來發布您的交易。
          • ? Solidity: [2]一種面向對象的編程語言,用于在以太坊上實現智能合約。
          • ? Hardhat: [3]一個以太坊開發環境,允許您編譯 Solidity 合約、在開發網絡上測試合約并查看 Solidity 堆棧跟蹤。
          • ? Etherscan: [4]一個在線區塊鏈瀏覽器,允許您查看公共區塊鏈上的交易、區塊和錢包狀態。
          • ? Alchemy: [5]一個 web3 開發者平臺,允許您通過免費節點與以太坊網絡的其余部分連接。

          如果你有興趣,讓我們開始吧!

          目錄

          1、什么是智能合約

          2、部署您的第一個智能合約

          3、什么是氣體

          4、與您的智能合約交互

          5、智能合約的結構

          6、將您的合同提交給 Etherscan

          7、智能合約安全挑戰

          8、將合約集成到前端

          9、其他資源

          1、什么是智能合約?

          背景

          雖然這個概述主要是關于以太坊的,但實際上所有的概念都適用于支持智能合約的區塊鏈!

          智能合約是區塊鏈開發領域存在的主要原因。

          以太坊在 2013 年的核心創新是允許開發人員編寫稱為智能合約的小代碼塊,這些代碼可以部署到以太坊網絡,獨立于其創建者運行。在以太坊中,智能合約是用 Solidity 編寫的,這是一種設計用于在以太坊虛擬機上運行的高級編程語言。[6]

          智能合約是定義一組規則或“合約”的程序,當用戶在區塊鏈上調用時,它會自動執行編碼規則。特別是,一旦部署了智能合約,它的功能總是相同的——它不能被不法分子修改或控制。

          因此,智能合約是運行金融應用程序的理想選擇——它們可以作為獨立參與者以有保證的、可重復的方式接收或發送加密貨幣。

          真實世界的例子

          好的,但是有哪些現實世界的工具可以被智能合約取代的例子呢?

          • ? 金融工具:通常,當您在線交易股票或貨幣時,您需要第三方在交易發生時將這兩種資產托管在托管中 - 例如股票經紀人。智能合約可以充當第三方,允許在沒有中間人的情況下進行交易。
          • ? 財產所有權: 與法律文件相比,智能合約幾乎是即時執行的,可以公開訪問,并且可以允許分散所有權。
          • ? 構建額外的代幣: 令人難以置信的是,你實際上可以在以太坊上啟動新的代幣系統,例如 Tether 或 Chainlink。同樣,您可以使用智能合約啟動 NFT 項目,例如 Bored Apes 或 CryptoPunks。

          還有很多很多。事實上,最終可以使用區塊鏈重新設計哪些系統,我們可能仍然只是接觸到了皮毛。

          智能合約的特征

          哪些特征使智能合約能夠徹底改變或取代現有的技術模型?與傳統編程語言不同,智能合約具有以下屬性:

          • ? 透明度:智能合約發布到區塊鏈,任何有權訪問區塊鏈的人都可以讀寫。
          • ? 簡單性:由于智能合約部署到區塊鏈上的成本很高,并且包含指示金融交易流程的敏感邏輯,因此它們往往比大多數代碼庫更小更簡單。
          • ? 不變性:一旦部署了智能合約,它(通常)就不能被修改,并且無論何時調用都保證其功能相同!這使得智能合約可以作為可靠、受信任的第三方運行——因為沒有個人控制智能合約,它可以充當金融中介、值得信賴的自動化做市商,或者通過保證公正性而發揮更多作用。

          部署后,這些智能合約表現為完全透明但可以包含復雜邏輯的獨立參與者。因此,在以太坊上擁有賬戶的不僅是人類用戶,還有兩種類型的賬戶:

          • ? 由人類用戶管理的外部擁有的帳戶(EOA)。
          • ? 由其底層智能合約代碼管理的合約賬戶。

          EOA 和合約賬戶有什么區別?

          令人印象深刻的是,這兩種類型的帳戶可以做基本相同的事情!這兩種賬戶類型都可以:

          ? 接收或發送可替代代幣(以太幣)到任何賬戶? 接收或發送不可替代的代幣(加密貓)到任何賬戶? 觸發另一個合約賬戶——允許一個智能合約運行其他智能合約。? 生成新的智能合約——讓智能合約充當合約工廠!

          但是,合約賬戶有一些限制:

          ? 合約賬戶不能自行實例化操作——它們只能響應他們收到的交易(通常來自 EOA)。? 合約賬戶完全由其代碼控制,而 EOA 則由其關聯的私鑰控制。

          2、部署您的第一個智能合約

          如果您是區塊鏈開發的新手并且不知道從哪里開始,或者您只是想了解如何部署智能合約并與之交互,那么本指南適合您。我們將使用虛擬錢包( Metamask[7] )、Solidity[8]、Hardhat[9]和Alchemy[10]在 Goerli 測試網絡上創建和部署一個簡單的智能合約(如果你還不明白這意味著什么,請不要擔心,我們會解釋一下?。?。

          創建和部署您的智能合約

          第 1 步:連接到以太坊網絡

          有很多方法可以向以太坊鏈發出請求。為簡單起見,我們將在 Alchemy 上使用免費帳戶,這是一個區塊鏈開發平臺和 API,允許我們與以太坊鏈進行通信,而無需運行我們自己的節點。該平臺還具有用于監視和分析的開發人員工具,我們將在本教程中利用這些工具來了解我們的智能合約部署中的幕后情況。

          如果您還沒有 Alchemy 帳戶,請在此處免費注冊。[11]

          第 2 步:創建您的應用(和 API 密鑰)

          創建 Alchemy 帳戶后,您可以通過創建應用程序來生成 API 密鑰。這將允許我們向 Goerli 測試網絡發出請求。如果您不熟悉測試網,請查看本指南[12]。

          將鼠標懸停在導航欄中的“應用程序”上并單擊“創建應用程序”,導航到 Alchemy 儀表板中的“創建應用程序”頁面。

          將您的應用命名為“Hello World”,提供簡短描述,為環境選擇“Staging”(用于您的應用記賬),然后為您的網絡選擇“Goerli”。

          仔細檢查您是否選擇了 Goerli 測試網!

          點擊“創建應用程序”,就是這樣!您的應用程序應顯示在下表中。

          第3步:創建以太坊賬戶(地址)

          我們需要一個以太坊賬戶來發送和接收交易。在本教程中,我們將使用 Metamask,這是瀏覽器中的一個虛擬錢包,用于管理您的以太坊賬戶地址。如果你想了解更多關于以太坊交易如何運作的信息,請查看以太坊基金會的這個頁面[13]。

          您可以在此處[14]免費下載和創建 Metamask 帳戶。當您正在創建一個帳戶時,或者如果您已經有一個帳戶,請確保切換到右上角的“Goerli 測試網絡”(這樣我們就不會處理真錢)。

          第 4 步:從水龍頭中添加以太

          為了將我們的智能合約部署到測試網絡,我們需要一些虛假的 Eth。要獲取 Eth,您可以前往Goerli 水龍頭[15]并輸入您的 Goerli 帳戶地址,然后單擊“Send Me Eth”。由于網絡流量,可能需要一些時間才能收到您的虛假 Eth。(在撰寫本文時,大約需要 30 分鐘。)不久之后,您應該會在您的 Metamask 帳戶中看到 Eth!

          第 5 步:檢查您的余額

          為了仔細檢查我們的余額,讓我們使用Alchemy 的 composer tool發出一個[16]eth_getBalance[17]請求。這將返回我們錢包中的 Eth 數量。查看此視頻[18]以獲取有關如何使用作曲家工具的說明!

          輸入您的 Metamask 帳戶地址并單擊“發送請求”后,您應該會看到如下所示的響應:

          {"jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000"}

          注意:這個結果是 wei 而不是 eth。魏被用作以太的最小面額。wei到eth的換算為:1 eth = 10^18 wei。因此,如果我們將 0x2B5E3AF16B1880000 轉換為十進制,我們會得到 5*10^18,它等于 5 eth。呸!我們的假錢就在那里。

          第6步:初始化我們的項目

          mkdir hello-world
          cd hello-world

          首先,我們需要為我們的項目創建一個文件夾。導航到您的命令行[19]并鍵入:

          現在我們在項目文件夾中,我們將使用 npm init 來初始化項目。如果您還沒有安裝 npm,請按照這些說明進行操作[20](我們還需要 Node.js,所以也下載它?。?。

          npm init # (or npm init --yes)

          您如何回答安裝問題并不重要,以下是我們的做法以供參考:

          package name: (hello-world)
          version: (1.0.0)
          description: hello world smart contract
          entry point: (index.js)
          test command:
          git repository:
          keywords:
          author:
          license: (ISC)
          
          About to write to /Users/.../.../.../hello-world/package.json:
          
          {
             "name": "hello-world",
             "version": "1.0.0",
             "description": "hello world smart contract",
             "main": "index.js",
             "scripts": {
                "test": "echo \"Error: no test specified\" && exit 1"
             },
             "author": "",
             "license": "ISC"
          }

          批準 package.json,我們就可以開始了!

          第7步:下載hardhat[21]

          Hardhat 是一個用于編譯、部署、測試和調試以太坊軟件的開發環境。在部署到實時鏈之前,它可以幫助開發人員在本地構建智能合約和 dApp。

          在我們的hello-world項目內部運行:

          npm install --save-dev hardhat

          查看此頁面以獲取有關安裝說明[22]的更多詳細信息。

          第8步:創建hardhat項目

          在我們的hello-world項目文件夾中,運行:

          npx hardhat

          然后,您應該會看到一條歡迎消息和用于選擇您想要執行的操作的選項。選擇“創建一個空的 hardhat.config.js”:

          888    888                      888 888               888
          888    888                      888 888               888
          888    888                      888 888               888
          8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888
          888    888     "88b 888P"  d88" 888 888 "88b     "88b 888
          888    888 .d888888 888    888  888 888  888 .d888888 888
          888    888 888  888 888    Y88b 888 888  888 888  888 Y88b.
          888    888 "Y888888 888     "Y88888 888  888 "Y888888  "Y888
          
           Welcome to Hardhat v2.0.11 ?
          
          What do you want to do? …
          Create a sample project
          ? Create an empty hardhat.config.js
          Quit

          這將為我們生成一個hardhat.config.js文件,我們將在其中指定項目的所有設置(在第 13 步中)。

          第9步:添加項目文件夾

          為了讓我們的項目井井有條,我們將創建兩個新文件夾。在命令行中導航到 hello-world 項目的根目錄并鍵入

          mkdir contracts
          mkdir scripts

          contracts/是我們保存 hello world 智能合約代碼文件的地方

          scripts/是我們將保留腳本以部署和與我們的合約交互的地方

          第10步:編寫我們的合同

          您可能會問自己,我們到底什么時候要編寫代碼?好吧,我們到了,第 10 步

          在您喜歡的編輯器中打開 hello-world 項目(我們喜歡VSCode[23])。智能合約是用一種稱為 Solidity 的語言編寫的,我們將使用它來編寫我們的 HelloWorld.sol 智能合約。?

          1. 1. 導航到“contracts”文件夾并創建一個名為 HelloWorld.sol 的新文件
          2. 2. 下面是我們將在本教程中使用的來自以太坊基金會[24]的 Hello World 智能合約示例。將以下內容復制并粘貼到您的 HelloWorld.sol 文件中,并確保閱讀注釋以了解此合約的作用:
          // Specifies the version of Solidity, using semantic versioning.
          // Learn more: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma
          pragma solidity >=0.7.3;
          
          // Defines a contract named `HelloWorld`.
          // A contract is a collection of functions and data (its state). Once deployed, a contract resides at a specific address on the Ethereum blockchain. Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html
          contract HelloWorld {
          
             //Emitted when update function is called
             //Smart contract events are a way for your contract to communicate that something happened on the blockchain to your app front-end, which can be 'listening' for certain events and take action when they happen.
             event UpdatedMessages(string oldStr, string newStr);
          
             // Declares a state variable `message` of type `string`.
             // State variables are variables whose values are permanently stored in contract storage. The keyword `public` makes variables accessible from outside a contract and creates a function that other contracts or clients can call to access the value.
             string public message;
          
             // Similar to many class-based object-oriented languages, a constructor is a special function that is only executed upon contract creation.
             // Constructors are used to initialize the contract's data. Learn more:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors
             constructor(string memory initMessage) {
          
                // Accepts a string argument `initMessage` and sets the value into the contract's `message` storage variable).
                message = initMessage;
             }
          
             // A public function that accepts a string argument and updates the `message` storage variable.
             function update(string memory newMessage) public {
                string memory oldMsg = message;
                message = newMessage;
                emit UpdatedMessages(oldMsg, newMessage);
             }
          }

          這是一個超級簡單的智能合約,它在創建時存儲一條消息,并且可以通過調用update函數來更新。

          第11步:將 Metamask 和 Alchemy 連接到您的項目

          我們已經創建了一個 Metamask 錢包、Alchemy 賬戶,并編寫了我們的智能合約,現在是時候連接這三者了。

          從您的虛擬錢包發送的每筆交易都需要使用您唯一的私鑰進行簽名。為了向我們的程序提供此權限,我們可以將我們的私鑰(和 Alchemy API 密鑰)安全地存儲在環境文件中。

          要了解有關發送交易的更多信息,請查看有關使用 web3 發送交易的教程。[25]

          首先,在你的項目目錄中安裝 dotenv 包:

          npm install dotenv --save

          這是一個超級簡單的智能合約,它在創建時存儲一條消息,并且可以通過調用update函數來更新。

          您的環境文件必須命名為 .env 否則將不會被識別為環境文件。請勿將其命名為 process.env 或 .env-custom 或其他任何名稱。

          • ? 按照這些說明[26]導出您的私鑰
          • ? 請參閱下文以獲取 HTTP Alchemy API URL

          你的.env應該是這樣的:

          API_URL = "https://eth-goerli.alchemyapi.io/v2/your-api-key"
          PRIVATE_KEY = "your-metamask-private-key"

          為了將這些實際連接到我們的代碼,我們將在第 13 步的hardhat.config.js文件中引用這些變量。

          第12步:安裝 Ethers.js

          Ethers.js 是一個庫,它通過使用更用戶友好的方法包裝標準 JSON-RPC 方法,使交互和向以太坊發出請求變得更加容易。[27]

          Hardhat 使集成插件[28]變得非常容易,以獲得額外的工具和擴展功能。我們將利用Ethers 插件[29]進行合約部署(Ethers.js[30]有一些超級干凈的合約部署方法)。

          在您的項目目錄類型中:

          npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"

          在下一步中,我們還將在我們的hardhat.config.js中請求以太坊。

          第13步:更新 hardhat.config.js

          到目前為止,我們已經添加了幾個依賴項和插件,現在我們需要更新 hardhat.config.js 以便我們的項目了解所有這些。

          更新你的hardhat.config.js,使其看起來像這樣。:

          /**
          * @type import('hardhat/config').HardhatUserConfig
          */
          
          require('dotenv').config();
          require("@nomiclabs/hardhat-ethers");
          
          const { API_URL, PRIVATE_KEY } = process.env;
          
          module.exports = {
             solidity: "0.7.3",
             defaultNetwork: "goerli",
             networks: {
                hardhat: {},
                goerli: {
                   url: API_URL,
                   accounts: [`0x${PRIVATE_KEY}`]
                }
             },
          }

          第14步:編譯我們的合約

          為了確保到目前為止一切正常,讓我們編譯我們的合約。編譯任務是內置hardhat任務之一。

          從命令行運行:

          npx hardhat compile

          您可能會收到關于SPDX license identifier not provided in source file 的警告,但無需擔心——希望其他一切看起來都不錯!

          如果沒有,您可以隨時在Alchemy discord[31]中留言。

          第15步:編寫我們的部署腳本

          現在我們的合約已經寫好并且我們的配置文件已經準備好了,是時候編寫我們的合約部署腳本了。

          導航到/scripts文件夾并創建一個名為deploy.js的新文件 ,向其中添加以下內容:

          async function main() {
             const HelloWorld = await ethers.getContractFactory("HelloWorld");
          
             // Start deployment, returning a promise that resolves to a contract object
             const hello_world = await HelloWorld.deploy("Hello World!");
             console.log("Contract deployed to address:", hello_world.address);
          }
          
          main()
            .then(() => process.exit(0))
            .catch(error => {
              console.error(error);
              process.exit(1);
            });

          Hardhat 在他們的合同教程[32]中解釋了每行代碼的作用,我們在這里采用了他們的解釋。

          const HelloWorld = await ethers.getContractFactory("HelloWorld");

          在ethers.js中,ContractFactory是一個用于部署新的智能合約的抽象概念,所以這里的HelloWorld是我們hello world合約實例的工廠。當使用hardhat-ethers插件ContractFactory和Contract時,實例被默認連接到第一個簽名者(所有者)。

          const hello_world = await HelloWorld.deploy();

          調用a將啟動部署,并返回解析為 Contract 對象的 Promise。這是為我們的每個智能合約功能提供方法的對象。deploy()``ContractFactory

          第16步:部署我們的合約

          我們終于準備好部署我們的智能合約了!導航到命令行并運行:

          npx hardhat run scripts/deploy.js --network goerli

          然后,您應該會看到如下內容:

          Contract deployed to address: 0xCAFBf889bef0617d9209Cf96f18c850e901A6D61

          請復制并粘貼此地址以將其保存在某處,因為我們將在以后的教程中使用此地址,因此您不想丟失它。

          如果我們去Goerli etherscan[33]并搜索我們的合約地址,我們應該能夠看到它已經成功部署。交易將如下所示:

          發件人地址應與您的 Metamask 帳戶地址匹配,收件人地址將顯示“合同創建”,但如果我們點擊交易,我們將在收件人字段中看到我們的合同地址:

          恭喜!你剛剛在以太坊鏈上部署了一個智能合約

          要了解幕后發生的事情,讓我們導航到Alchemy 儀表板[34]中的 Explorer 選項卡。如果您有多個 Alchemy 應用程序,請確保按應用程序過濾并選擇“Hello World”。

          在這里,你會看到Hardhat/Ethers在我們調用deploy()函數時在引擎蓋下進行的一些JSON-RPC調用。這里有兩個重要的調用,一個是eth_sendRawTransaction,這是實際將我們的合同寫到Ropsten鏈上的請求,另一個是eth_getTransactionByHash,這是一個讀取關于我們交易的哈希值的請求(發送交易時的一個典型模式)。

          要了解有關發送交易的更多信息,請查看有關使用 Web3 發送交易[35]的教程。

          譯者注:下一篇明天到來,保持關注。

          引用鏈接

          [1] Metamask: : https://metamask.io/
          [2] Solidity: : https://docs.soliditylang.org/
          [3] Hardhat: : https://hardhat.org/
          [4] Etherscan: : https://etherscan.io/
          [5] Alchemy: : https://alchemy.com/
          [6] 以太坊虛擬機上運行的高級編程語言。: https://cypherpunks-core.github.io/ethereumbook/13evm.html
          [7] Metamask: https://metamask.io/
          [8] Solidity: https://docs.soliditylang.org/en/v0.8.0/
          [9] Hardhat: https://hardhat.org/
          [10] Alchemy: https://dashboard.alchemyapi.io/signup?referral=affiliate:df70d561-e6cf-4922-b101-e2bb27c00a15
          [11] 如果您還沒有 Alchemy 帳戶,請在此處免費注冊。: https://alchemy.com/
          [12] 本指南: https://docs.alchemyapi.io/guides/choosing-a-network
          [13] 這個頁面: https://ethereum.org/en/developers/docs/transactions/
          [14] 您可以在此處: https://metamask.io/download.html
          [15] Goerli 水龍頭: https://goerlifaucet.com/
          [16] Alchemy 的 composer tool發出一個: https://composer.alchemyapi.io/?composer_state={"network"%3A0%2C"methodName"%3A"eth_getBalance"%2C"paramValues"%3A[""%2C"latest"]}
          [17] eth_getBalance: https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance
          [18] 此視頻: https://youtu.be/r6sjRxBZJuU
          [19] 命令行: https://www.computerhope.com/jargon/c/commandi.htm
          [20] 這些說明進行操作: https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm
          [21] hardhat: https://hardhat.org/getting-started/#overview
          [22] 安裝說明: https://hardhat.org/getting-started/#overview
          [23] VSCode: https://code.visualstudio.com/
          [24] 以太坊基金會: https://ethereum.org/en/
          [25] 教程。: https://docs.alchemyapi.io/alchemy/tutorials/sending-transactions-using-web3-and-alchemy
          [26] 這些說明: https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key
          [27] 標準 JSON-RPC 方法,使交互和向以太坊發出請求變得更加容易。: https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc
          [28] 插件: https://hardhat.org/plugins/
          [29] Ethers 插件: https://hardhat.org/plugins/nomiclabs-hardhat-ethers.html
          [30] Ethers.js: https://github.com/ethers-io/ethers.js/
          [31] Alchemy discord: https://discord.gg/u72VCg3
          [32] 合同教程: https://hardhat.org/tutorial/testing-contracts.html#writing-tests
          [33] Goerli etherscan: https://goerli.etherscan.io/
          [34] Alchemy 儀表板: https://dashboard.alchemyapi.io/explorer
          [35] 使用 Web3 發送交易: https://docs.alchemy.com/alchemy/tutorials/sending-txs

          編寫web工程的流程3

          全文共6260字,預計學習時長13分鐘

          不了解任何網頁框架?沒關系,本文將教你如何輕松搞定從數據科學項目到超棒程序的無縫轉換。

          圖片來源:Cody Black Unsplash

          稍作休息,開始編碼。

          機器學習項目只有充分展示給公眾時才稱得上是完整的項目。

          過去在介紹數據科學項目時,選擇合適的可視化操作或簡單的PPT就足夠了,但現在隨著像RShiny和Dash這類儀表盤化工具的出現,一名合格的數據科學家也需要掌握一定的Web框架的知識。

          可Web框架也不是塊好啃的骨頭。筆者在嘗試一些看似簡單的操作時,仍會被HTML、CSS和Javascript等搞得暈頭轉向,于數次實踐中嘗遍失敗的滋味。

          對數據科學同胞們來說,Web開發只是次要技能,所以更別提嘗試多種途徑做這一件事了,會讓這些人不知所措的。

          那我們就注定避免不了Web框架的學習之路嗎?還是說大半夜的給開發人員打電話問一些很蠢的問題?

          于是StreamLit帶著自身的使命出現了,它僅借助Python就能夠創建Web應用程序。

          Python的宗旨:簡單勝于復雜,而Streamlit創建應用程序則完美地詮釋了其易操作性。

          這篇文將為大家講解何使用Streamlit來創建支持數據科學項目的應用程序。

          安裝

          安裝步驟跟運行指令一樣簡單:

          pip install streamlit

          查看是否安裝成功時只需運行:

          streamlit hello

          屏幕上應該顯示的是:

          可以在瀏覽器中訪問本地URL:localhost:8501,來查看執行中的Streamlit應用程序。開發人員那里也有許多很棒的樣本可供嘗試。

          Streamlit“你好,世界”

          Streamlit旨在通過簡單的Python代碼實現簡單的程序開發。

          那就設計一款簡單的應用程序,看看它是否真的像它說的那樣。

          從Streamlit的名為“hello,world”的程序入手,這個程序并不復雜。只需要復制粘貼下面這個代碼到“helloworld.py”的文件夾中即可。

          import streamlit as st

          x = st.slider('x')

          st.write(x, 'squared is', x * x)

          然后到最后運行階段時:

          streamlit run helloworld.py

          看吧,瀏覽器連接到localhost:8501,就可以看到執行中的程序,滑動鼠標就可以得到結果。

          簡單的滑塊插件應用程序

          操作非常簡單。在構建上圖應用程序時,用到了Streamlit的兩個特性:

          ? st.slider插件——滑動改變Web應用程序的輸出內容。

          ? 以及通用的st.write 指令。筆者對于它能從圖標、數據框和簡單的文本中編寫任何東西感到驚訝。后面會有詳細介紹。

          敲黑板:大家要記住每次改變插件值時,整個應用程序都會由上至下運行。

          Streamlit插件

          插件提供了控制應用程序的方法,閱讀了解插件的最佳選擇就是API參考文檔,不過筆者這里也會講解一些插件,它們都是用戶在操作后期會用的最主要的插件。

          1. 滑塊

          streamlit.slider(label, min_value=None, max_value=None, value=None, step=None, format=None)

          在上文已經目睹了st.slider的執行過程,它可以結合min_value、max_value使用,用于進一步得到一定范圍內的輸入內容。

          2. 文本輸入

          獲取用戶輸入最簡單的方式是輸入URL或一些用于分析情緒的文本內容,需要的只是一個用來命名文本框的標簽。

          import streamlit as st

          url = st.text_input('Enter URL')

          st.write('The Entered URL is', url)

          看到的程序將是這樣:

          簡單的text_input widget程序

          貼士:可以只改變helloworld.py文件然后刷新頁面。筆者的做法是打開該文件然后在文本編輯器中改動,再一點一點查看變動的地方。

          3. 復選框

          復選框的一個功能就是隱藏或顯示/隱藏程序中的特定區域,另一個用途是設置函數的布爾參數值。st.checkbox() 需要一個參數,即插件標簽。在該應用程序中,復選框會用來切換條件語句。

          import streamlit as st

          import pandas as pd

          import numpy as np

          df = pd.read_csv("football_data.csv")

          if st.checkbox('Show dataframe'):

          st.write(df)

          簡單的復選框插件應用程序

          4. 下拉框插件

          通過st.selectbox可以在一系列選項或列表中進行選擇。常見的用法是將其作為下拉項然后從名單中挑選值。

          import streamlit as st

          import pandas as pd

          import numpy as np

          df = pd.read_csv("football_data.csv")option = st.selectbox(

          'Which Club do you like best?',

          df['Club'].unique())

          'You selected: ', option

          簡單的下拉框/復選框插件程序

          5. 多選插件

          也可以用下拉框內的多個值。這里講的是使用 st.multiselect在變量選選中獲取多個值作為列表。

          import streamlit as st

          import pandas as pd

          import numpy as np

          df = pd.read_csv("football_data.csv")

          options = st.multiselect(

          'What are your favorite clubs?', df['Club'].unique())

          st.write('You selected:', options)

          簡單的下拉框插件應用程序

          一步步創建應用程序

          重要插件了解的也差不多了,現在馬上要用多個插件創建應用程序。

          從簡單的步驟入門,嘗試使用Streamlit對足球數據進行可視化。有了上面那些插件,這個步驟執行起來會容易很多。

          import streamlit as st

          import pandas as pd

          import numpy as np

          df = pd.read_csv("football_data.csv")

          clubs = st.multiselect('Show Player for clubs?', df['Club'].unique())

          nationalities = st.multiselect('Show Player from Nationalities?', df['Nationality'].unique())

          # Filter dataframe

          new_df = df[(df['Club'].isin(clubs)) & (df['Nationality'].isin(nationalities))]

          # write dataframe to screen

          st.write(new_df)

          簡單的應用程序會是這樣的:

          同時使用多個插件

          這一點也不難,但目前看起來似乎太基礎了。是否可以考慮加入一些圖表呢?

          Streamlit當前支持許多用于繪圖的庫,其中就有Plotly, Bokeh, Matplotlib, Altair和Vega圖表。Plotly Express也可以,只不過沒有詳細說明。也存在一些內嵌式圖表,相當于Streamlit“自帶”的,比如st.line_chart 和st.area_chart.

          此時會用到plotly_express,下面是設計程序會用到的代碼。該過程只會調用Streamlit四次。剩下的都是一些簡單的Python代碼操作。

          import streamlit as st

          import pandas as pd

          import numpy as np

          import plotly_express as px

          df = pd.read_csv("football_data.csv")

          clubs = st.multiselect('Show Player for clubs?', df['Club'].unique())

          nationalities = st.multiselect('Show Player from Nationalities?', df['Nationality'].unique())new_df = df[(df['Club'].isin(clubs)) & (df['Nationality'].isin(nationalities))]

          st.write(new_df)

          # create figure using plotly express

          fig = px.scatter(new_df, x ='Overall',y='Age',color='Name')

          # Plot!

          st.plotly_chart(fig)

          添加圖表

          改進

          在本文一開始有提到插件每次發生變動時,整個應用程序就會由上至下地運行。其實并不可行,因為創建的應用程序會保留下深度學習模型或復雜的機器學習模型。接下來在講Streamlit的緩存時會向讀者闡釋這一點。

          1. 緩存

          在這個簡單的程序里,但凡值有所變動時,數據科學家們就會反復瀏覽數據框。它比較適用于用戶手中的小規模數據,至于大規?;蛐枰M行很多步處理的數據,它是不予理睬的。接下來在Streamlit中通過st.cache裝飾器函數體驗緩存的功能吧。

          import streamlit as st

          import pandas as pd

          import numpy as np

          import plotly_express as px

          df = st.cache(pd.read_csv)("football_data.csv")

          或者是復雜一些、時間耗費久一些的函數,只需要運行一次,此時可以用:

          @st.cache

          def complex_func(a,b):

          DO SOMETHING COMPLEX

          # Won't run again and again.

          complex_func(a,b)

          用Streamlit的緩存裝飾器標記函數時,無論這個函數是否執行,都會檢查輸入的參數值(由該函數處理的)。

          如果Streamlit之前沒有處理過這些數據,它會調用函數并將運算結果存到本地緩存中。

          下次再調用函數時,倘若還是這些參數,Streamlit就會完全跳過這一塊的函數執行,直接用緩存器里的結果數據。

          2. 側邊欄

          為了根據個人的傾向需求使界面更加簡潔,用戶可能會想著把插件移動到側邊欄內,比如像Rshiny儀表盤。這非常簡單,只需在插件代碼中添加 st.sidebar即可。

          import streamlit as st

          import pandas as pd

          import numpy as np

          import plotly_express as px

          df = st.cache(pd.read_csv)("football_data.csv")

          clubs = st.sidebar.multiselect('Show Player for clubs?', df['Club'].unique())

          nationalities = st.sidebar.multiselect('Show Player from Nationalities?', df['Nationality'].unique())

          new_df = df[(df['Club'].isin(clubs)) & (df['Nationality'].isin(nationalities))]

          st.write(new_df)

          # Create distplot with custom bin_size

          fig = px.scatter(new_df, x ='Overall',y='Age',color='Name')

          # Plot!

          st.plotly_chart(fig)

          將插件移動到側邊欄內

          3. Markdown標記語言可以嗎?

          筆者特別喜歡在Markdown里編輯文字,因為發現相比HTML,它少了那些繁瑣的操作,而且更能勝任數據科學的任務。所以讀者也能在Streamlit程序中應用Markdown嗎?

          答案是可以。而且是有跡可循的。在筆者看來,最合適的就是調用Magic指令。通過該指令,用戶做標記語言就會像寫評論一樣簡單。用戶也可以使用指令st.markdown。

          import streamlit as st

          import pandas as pd

          import numpy as np

          import plotly_express as px'''

          # Club and Nationality App

          This very simple webapp allows you to select and visualize players from certain clubs and certain nationalities.

          '''

          df = st.cache(pd.read_csv)("football_data.csv")

          clubs = st.sidebar.multiselect('Show Player for clubs?', df['Club'].unique())

          nationalities = st.sidebar.multiselect('Show Player from Nationalities?', df['Nationality'].unique())new_df = df[(df['Club'].isin(clubs)) & (df['Nationality'].isin(nationalities))]

          st.write(new_df)

          # Create distplot with custom bin_size

          fig = px.scatter(new_df, x ='Overall',y='Age',color='Name')

          '''

          ### Here is a simple chart between player age and overall

          '''

          st.plotly_chart(fig)

          最終的樣品

          總結

          Streamlit已經介紹了整個創建應用程序的步驟,筆者真沒什么可補充的了。

          這篇文章中講述了一個簡單網頁程序的創建,但有太多未知數了。舉個例子,在Streamlit網站碰到GAN時,只會選擇插件和緩存的指導思想。

          筆者對程序的默認顏色和風格很喜愛,而且發現這用起來比Dash還順手,筆者創建新程序之前一直用的是Dash。讀者們也可以在自己的Streamlit程序中加上音頻和視頻項。

          最重要的是,Streamlit是一款免費的開源軟件,而不是開箱即用的私人網絡應用。

          以前筆者遇到任何變動或問題,都需要請教身邊的程序猿朋友;而現在,完全不會這么麻煩了。

          筆者的目標是從現在開始,在工作流中多用這個程序。即便是不難的任務,也會考慮用它,筆者覺得你也可以。

          雖然筆者還未曾想過在生產環境下它執行的好壞,但對于概念項目和演示的小型驗證來說,它算得上是福音了。筆者的目標是從現在開始,在工作流中多用這個程序。即便是不難的任務,也會考慮用它,筆者覺得你也可以。

          完整代碼:https://github.com/MLWhiz/streamlit_football_demo

          留言 點贊 關注

          我們一起分享AI學習與發展的干貨

          如需轉載,請后臺留言,遵守轉載規范

          閱讀全文
          返回頂部
          韩国午夜理论片2021最新
          <wbr id="r89mi"><small id="r89mi"></small></wbr>
            1. <wbr id="r89mi"><small id="r89mi"></small></wbr>
              <video id="r89mi"></video>
            2. <wbr id="r89mi"><small id="r89mi"><tr id="r89mi"></tr></small></wbr>
                <video id="r89mi"></video>
                <wbr id="r89mi"><small id="r89mi"><tr id="r89mi"></tr></small></wbr>
                <video id="r89mi"><address id="r89mi"></address></video>
                <wbr id="r89mi"></wbr><wbr id="r89mi"><small id="r89mi"><tr id="r89mi"></tr></small></wbr>