Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产午夜精品一区二区三区不卡 ,欧美一二三区在线,日韩精品一区二区三区大桥未久

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          PyScript:讓Python在HTML中運(yùn)行

          家好,我是DD,已經(jīng)是封閉在家的第51天了!

          最近一直在更新Java新特性(https://www.didispace.com/java-features/)和IDEA Tips(https://www.didispace.com/idea-tips/)兩個(gè)原創(chuàng)專欄,其他方向內(nèi)容的動(dòng)態(tài)關(guān)注少了。昨天天晚上刷推的時(shí)候,瞄到了這個(gè)神奇的東西,覺(jué)得挺cool的,拿出來(lái)分享下:

          相信你看到圖,不用我說(shuō),你也猜到是啥了吧?html里可以跑python代碼了!

          看到好多Python公眾號(hào)已經(jīng)開(kāi)始猛吹未來(lái)了,但乍看怎么覺(jué)得有點(diǎn)像JSP?或者一些模版引擎?是進(jìn)步還是倒退呢?與其瞎想,不如仔細(xì)看看這個(gè)東東的能力吧!

          根據(jù)官方介紹,這個(gè)名為PyScript的框架,其核心目標(biāo)是為開(kāi)發(fā)者提供在標(biāo)準(zhǔn)HTML中嵌入Python代碼的能力,使用 Python調(diào)用JavaScript函數(shù)庫(kù),并以此實(shí)現(xiàn)利用Python創(chuàng)建Web應(yīng)用的功能。

          看到介紹里提到了調(diào)用JavaScript函數(shù)庫(kù)的能力,看來(lái)跟JSP或者模版引擎還是有區(qū)別的。

          PyScript 快速體驗(yàn)

          官方給了一個(gè)例子,可以幫助我們觀的感受這個(gè)開(kāi)發(fā)框架的能力,不妨跟著DD看看,它能做啥吧!

          第一個(gè)案例,hello world

          代碼很簡(jiǎn)單,就下面這幾行。你只需要?jiǎng)?chuàng)建一個(gè)html文件,然后復(fù)制進(jìn)去就可以了。

          <html>
            <head>
              <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
              <script defer src="https://pyscript.net/alpha/pyscript.js"></script>
            </head>
            <body> 
              <py-script> 
                  print('Hello, World!') 
              </py-script> 
            </body>
          </html>
          

          保存好之后,在瀏覽器里打開(kāi)就能看到這樣的頁(yè)面了:

          回頭再看看這個(gè)html里的內(nèi)容,三個(gè)核心內(nèi)容:

          • 引入pyscript的樣式文件:<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
          • 引入pyscript的腳本文件:<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
          • <py-script>標(biāo)簽中寫具體的python代碼來(lái)輸出Hello World

          如果你懶得自己敲代碼的話,本文的兩個(gè)案例代碼我打包放在公眾號(hào)了,需要的朋友可以關(guān)注公眾號(hào)“程序猿DD”,回復(fù):pyscript 獲取。

          第二個(gè)案例,數(shù)據(jù)定義 + 數(shù)據(jù)展示

          先創(chuàng)建一個(gè)data.py文件,然后加入前面的代碼。功能很簡(jiǎn)單,就是隨機(jī)生成(x,y)的坐標(biāo)

          import numpy as np
          
          def make_x_and_y(n):
              x = np.random.randn(n)
              y = np.random.randn(n)
              return x, y
          

          再創(chuàng)建一個(gè)html文件,加入下面的代碼

          <html>
              <head>
                <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
                <script defer src="https://pyscript.net/alpha/pyscript.js"></script>
                <py-env>
                  - numpy
                  - matplotlib
                  - paths:
                    - /data.py
                </py-env>
              </head>
          
            <body>
              <h1>Let's plot random numbers</h1>
              <div id="plot"></div>
              <py-script output="plot">
              import matplotlib.pyplot as plt
              from data import make_x_and_y
          
              x, y = make_x_and_y(n=1000)
          
              fig, ax = plt.subplots()
              ax.scatter(x, y)
              fig
              </py-script>
            </body>
          </html>
          

          這里就稍微復(fù)雜一些了,除了hello world中的幾個(gè)要點(diǎn)外,這里還有這幾個(gè)要關(guān)注的地方:

          • <py-env>標(biāo)簽:這里聲明要引入的包和要引入的文件(上面創(chuàng)建的data.py
          • <py-script output="plot">:這里定義了要在<div id="plot"></div>中輸出的內(nèi)容,可以看到這里的邏輯都是用python寫的

          這個(gè)頁(yè)面的執(zhí)行效果是這樣的:

          是不是很神奇呢?整個(gè)過(guò)程中都沒(méi)有大家熟悉的cs、js內(nèi)容,就完成了這樣一個(gè)圖的頁(yè)面實(shí)現(xiàn)。

          小結(jié)

          最后,談?wù)勗谡麄€(gè)嘗試過(guò)程中,給我的幾個(gè)感受:

          1. 開(kāi)發(fā)體驗(yàn)上高度統(tǒng)一,對(duì)于python開(kāi)發(fā)者來(lái)說(shuō),開(kāi)發(fā)Web應(yīng)用的門檻可以更低了
          2. 感覺(jué)性能上似乎有所不足,幾個(gè)復(fù)雜的案例執(zhí)行有點(diǎn)慢,開(kāi)始以為是部分國(guó)外cdn的緣故,后來(lái)移到本地后,還是慢。這部分可能還需要進(jìn)一步優(yōu)化。

          這個(gè)開(kāi)發(fā)框架目前還只是alpha版本,未來(lái)一定還會(huì)有更多特性與優(yōu)化出來(lái),總體上我覺(jué)得這個(gè)框架還是非常cool的,尤其對(duì)于剛學(xué)會(huì)Python,或者只會(huì)Python,但又想快速開(kāi)發(fā)Web應(yīng)用的小伙伴來(lái)說(shuō),可能將會(huì)是個(gè)不錯(cuò)的選擇,那你覺(jué)得這個(gè)框架如何?未來(lái)會(huì)不會(huì)火?留言區(qū)聊聊吧!

          TML教程

          超文本標(biāo)記語(yǔ)言(英語(yǔ):HyperText Markup Language,簡(jiǎn)稱:HTML)是一種用于創(chuàng)建網(wǎng)頁(yè)的標(biāo)準(zhǔn)標(biāo)記語(yǔ)言。

          您可以使用 HTML 來(lái)建立自己的 WEB 站點(diǎn),HTML 運(yùn)行在瀏覽器上,由瀏覽器來(lái)解析。

          在本教程中,您將學(xué)習(xí)如何使用 HTML 來(lái)創(chuàng)建站點(diǎn)。

          HTML 很容易學(xué)習(xí)!相信您能很快學(xué)會(huì)它!

          本教程包含了數(shù)百個(gè) HTML 實(shí)例。

          使用本站的編輯器,您可以輕松實(shí)現(xiàn)在線修改 HTML,并查看實(shí)例運(yùn)行結(jié)果。

          <!DOCTYPE html>
          <html>
              <head>
                  <meta charset="utf-8">
                  <title>孫叫獸的博客</title>
              </head>
              <body>
                  <h1>我的第一個(gè)標(biāo)題</h1>
                  <p>我的第一個(gè)段落。</p>
              </body>
          </html>

          HTML 文檔的后綴名

          .html

          .htm

          都可以。

          • HTML 簡(jiǎn)介

          實(shí)例:

          <!doctype html>
          <html>
          <header>
          <meta charset="utf-8">
          <title>孫叫獸的博客</title>
          </header>
          <body>
          <h1>這是我的標(biāo)題</h1>
          <p>這是我的段落</p>
          </body>
          </html>

          實(shí)例解析

          • <!DOCTYPE html> 聲明為 HTML5 文檔
          • <html> 元素是 HTML 頁(yè)面的根元素
          • <head> 元素包含了文檔的元(meta)數(shù)據(jù),如 <meta charset=“utf-8”> 定義網(wǎng)頁(yè)編碼格式為 utf-8。
          • <title> 元素描述了文檔的標(biāo)題
          • <body> 元素包含了可見(jiàn)的頁(yè)面內(nèi)容
          • <h1> 元素定義一個(gè)大標(biāo)題
          • <p> 元素定義一個(gè)段落

          什么是HTML?

          • HTML 是用來(lái)描述網(wǎng)頁(yè)的一種語(yǔ)言。
          • HTML 指的是超文本標(biāo)記語(yǔ)言: HyperText Markup Language
          • HTML 不是一種編程語(yǔ)言,而是一種標(biāo)記語(yǔ)言
          • 標(biāo)記語(yǔ)言是一套標(biāo)記標(biāo)簽 (markup tag)
          • HTML 使用標(biāo)記標(biāo)簽來(lái)描述網(wǎng)頁(yè)
          • HTML 文檔包含了HTML 標(biāo)簽及文本內(nèi)容
          • HTML文檔也叫做 web 頁(yè)面
          • HTML 標(biāo)簽
          • HTML 標(biāo)記標(biāo)簽通常被稱為 HTML

          標(biāo)簽

        1. HTML 標(biāo)簽是由尖括號(hào)包圍的關(guān)鍵詞,比如 <html>
        2. HTML 標(biāo)簽通常是成對(duì)出現(xiàn)的,比如 <b> 和 </b>
        3. 標(biāo)簽對(duì)中的第一個(gè)標(biāo)簽是開(kāi)始標(biāo)簽,第二個(gè)標(biāo)簽是結(jié)束標(biāo)簽
        4. 開(kāi)始和結(jié)束標(biāo)簽也被稱為開(kāi)放標(biāo)簽和閉合標(biāo)簽
        5. <標(biāo)簽>內(nèi)容</標(biāo)簽>

          html元素

          “HTML 標(biāo)簽” 和 “HTML 元素” 通常都是描述同樣的意思.

          但是嚴(yán)格來(lái)講, 一個(gè) HTML 元素包含了開(kāi)始標(biāo)簽與結(jié)束標(biāo)簽,如下實(shí)例:

          HTML 元素:

          <p>這是一個(gè)段落</p>

          web瀏覽器

          Web瀏覽器(如谷歌瀏覽器,Internet Explorer,F(xiàn)irefox,Safari)是用于讀取HTML文件,并將其作為網(wǎng)頁(yè)顯示。

          瀏覽器并不是直接顯示的HTML標(biāo)簽,但可以使用標(biāo)簽來(lái)決定如何展現(xiàn)HTML頁(yè)面的內(nèi)容給用戶

          html網(wǎng)頁(yè)結(jié)構(gòu)

          <html>
              <head>
                  <title>頁(yè)面標(biāo)題</title>
              </head>
              <body>
                  <h1>這是一個(gè)標(biāo)題</h1>
                  <p>這是一個(gè)段落。</p>
                  <p>這是另外一個(gè)段落。</p>
              </body>
          </html>

          html的版本:

          <!DOCTYPE>聲明

          <!DOCTYPE>聲明有助于瀏覽器中正確顯示網(wǎng)頁(yè)。

          網(wǎng)絡(luò)上有很多不同的文件,如果能夠正確聲明HTML的版本,瀏覽器就能正確顯示網(wǎng)頁(yè)內(nèi)容。

          doctype 聲明是不區(qū)分大小寫的,以下方式均可:

          <!DOCTYPE html>
          <!DOCTYPE HTML>
          <!doctype html>
          <!Doctype Html>

          html5

          <!DOCTYPE html>

          html4

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4 Transitional//EN""
          http://www.w3.org/TR/html4/loose.dtd">

          xhtml1.0

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""
          http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

          中文編碼

          目前在大部分瀏覽器中,直接輸出中文會(huì)出現(xiàn)中文亂碼的情況,這時(shí)候我們就需要在頭部將字符聲明為 UTF-8。

          Python提供的標(biāo)準(zhǔn)庫(kù)中有一個(gè)名為html的標(biāo)準(zhǔn)庫(kù),該標(biāo)準(zhǔn)庫(kù)提供的功能很簡(jiǎn)單,僅僅是把一些組成標(biāo)簽的尖括號(hào)或者是一些特殊字符轉(zhuǎn)換成實(shí)體字符。

          這也是Python本身秉持的設(shè)計(jì)哲學(xué),就是一個(gè)函數(shù)、一個(gè)模塊或者一個(gè)標(biāo)準(zhǔn)庫(kù)只專注于一件事或者是某一方面的事。



          我們先來(lái)大概了解該標(biāo)準(zhǔn)的組成

          
          >>> import html
          >>> dir(html)
          ['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_charref', '_html5', '_invalid_charrefs', '_invalid_codepoints', '_re', '_replace_charref', 'entities', 'escape', 'unescape']

          我們不管那些以_開(kāi)頭的東東,把注意放在escape和unescape這兩個(gè)函數(shù)上。

          假設(shè)我有一些HTML,我擔(dān)心其中會(huì)包含一些可能危險(xiǎn)的<script>標(biāo)記。這時(shí)有一種方法就是把標(biāo)簽的尖括號(hào)轉(zhuǎn)換成實(shí)體符號(hào),從以上兩個(gè)函數(shù)的命名可以大概了解相應(yīng)的功能。

          沒(méi)錯(cuò)escape函數(shù)就是轉(zhuǎn)義的意思,就是把一些字符轉(zhuǎn)換為實(shí)體字符。比如“<”會(huì)轉(zhuǎn)換成“&+lt”、“>”會(huì)轉(zhuǎn)換成“&+gt”等等。(加號(hào)表示連接兩邊的符號(hào))

          >>> import html
          >>> help(html.escape)
          Help on function escape in module html:
          
          escape(s, quote=True)
              Replace special characters "&", "<" and ">" to HTML-safe sequences.
              If the optional flag quote is true (the default), the quotation mark
              characters, both double quote (") and single quote (') characters are also
              translated.
          

          查看該函數(shù)的幫助可以了解到,它會(huì)把特定字符“&”,“<”,“>”等轉(zhuǎn)換成HTML安全的實(shí)體字符。該函數(shù)還有一個(gè)可選的標(biāo)記參數(shù),默認(rèn)為True,意思就是該函數(shù)默認(rèn)為把引用符號(hào)(“”、‘’)等一并轉(zhuǎn)換。

          >>> import html
          >>> demo = "<h1>Hello World!,'</h1>"
          >>> html.escape(demo,quote = False)
          "<h1>Hello World!,'mangfu'</h1>"

          上面的例子中,我設(shè)置可選參數(shù)quote為False,則它并不會(huì)對(duì)引號(hào)(‘’)進(jìn)行轉(zhuǎn)換。

          >>> import html
          >>> demo = "<h1>Hello World!,'</h1>"
          >>> html.escape(demo)
          '<h1>Hello World!,'mangfu'</h1>'

          上面的例子中,我使用該函數(shù)默認(rèn)的可選參數(shù),從結(jié)果中可以看出函數(shù)輸出已經(jīng)對(duì)引號(hào)(‘’)進(jìn)行轉(zhuǎn)換。

          至于unescape函數(shù),看該函數(shù)的名字就知道它的作用跟escape函數(shù)恰恰相反。

          可能大家對(duì)這些功能還不是很熟悉,但是這在Web開(kāi)發(fā)方面是很重要的,如果你以后學(xué)習(xí)Django來(lái)搭建自己的網(wǎng)站,會(huì)碰到這個(gè)功能的。

          大家可以動(dòng)手試試unescape函數(shù)。。。


          主站蜘蛛池模板: 无码精品尤物一区二区三区| 成人h动漫精品一区二区无码| 亚洲国产精品一区| 无码日韩AV一区二区三区| 国产精品美女一区二区| 国产福利一区二区在线视频| 国产丝袜无码一区二区视频| 亚洲高清偷拍一区二区三区| 久久精品一区二区三区中文字幕 | 日本在线电影一区二区三区| 国产在线一区观看| 日本在线一区二区| 精品人妻系列无码一区二区三区 | 亚洲国产一区在线观看| 亚洲国产成人久久一区二区三区 | 人妻少妇久久中文字幕一区二区| 2021国产精品一区二区在线| 国产在线观看精品一区二区三区91| 一本色道久久综合一区| 亚欧色一区W666天堂| 国产伦精品一区二区三区不卡| 夜色阁亚洲一区二区三区| 精品国产一区二区三区四区| 精品一区二区三区在线视频观看 | 极品尤物一区二区三区| 无码日韩人妻AV一区二区三区| 无码AV中文一区二区三区| 在线一区二区观看| 无码精品人妻一区二区三区免费看| 海角国精产品一区一区三区糖心| 国产亚洲一区区二区在线 | 丰满人妻一区二区三区免费视频 | 一本大道东京热无码一区 | 中文字幕久久亚洲一区| 99在线精品一区二区三区| 91福利国产在线观看一区二区| 久久久无码精品人妻一区| 亚洲一区二区在线视频| 久久免费视频一区| 国产福利一区视频| 国产SUV精品一区二区四|