最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)網(wǎng)站表單提交和模板

 更新時(shí)間:2019年01月15日 09:06:41   作者:hiekay  
今天小編就為大家分享一篇關(guān)于Python實(shí)現(xiàn)網(wǎng)站表單提交和模板,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

如果像前面那么做網(wǎng)站,也太丑陋了。并且功能也不多。

在實(shí)際做網(wǎng)站中,現(xiàn)在都要使用一個(gè)模板,并且在用戶直接看到的頁(yè)面,用html語(yǔ)言來(lái)寫(xiě)頁(yè)面。

在做網(wǎng)站的行業(yè)里面,常常將HTML+CSS+JS組成的網(wǎng)頁(yè),稱(chēng)作“前端”。它主要負(fù)責(zé)展示,或者讓用戶填寫(xiě)一些表格,通過(guò)JS提交給用python寫(xiě)的程序,讓python程序來(lái)處理數(shù)據(jù),那些處理數(shù)據(jù)的python程序稱(chēng)之為“后端”。我常常提醒做“后端”的,不要輕視“前端”。如果立志成為全棧工程師,就要從前到后都通。

關(guān)于本講,主要是要演示一個(gè)用模板(HTML)寫(xiě)一個(gè)表單,然后提交給后端的python程序,再轉(zhuǎn)到另外一個(gè)顯示的前端頁(yè)面顯示。為了簡(jiǎn)化流程,這個(gè)過(guò)程中沒(méi)有數(shù)據(jù)處理和CSS+Javascript的工作,所有界面會(huì)丑陋。

一個(gè)表單

要做一個(gè)前端的頁(yè)面,顯示的內(nèi)容就如同下圖樣式

相應(yīng)代碼是,并命名為index.html,存在一個(gè)名稱(chēng)是template的目錄中。

<!DOCTYPE html>
<html>
  <head>
    <title>sign in your name</title>
  </head>
  <body>
    <h2>Please sign in.</h2>
    <form method="post" action="/user">
      <p>Name:<br><input type="text" name="username"></p>
      <p>Email:<br><input type="text" name="email"></p>
      <p>Website:<br><input type="text" name="website"></p>
      <p>Language:<br><input type="text" name="language"></p>
      <input type="submit" value="ok,submit my information">
    </form>
  </body>
</html>

上面的代碼是比較簡(jiǎn)單,如果熟悉html的話,不熟悉也不要緊,網(wǎng)上搜索就能理解。注意,沒(méi)有CSS+JS,所以簡(jiǎn)單。如果在真正開(kāi)發(fā)中,這兩個(gè)是不能少的。

有了這個(gè)表單之后,如果用戶把相關(guān)信息都填寫(xiě)好了。點(diǎn)擊下面的按鈕,就應(yīng)該提交給后端的python程序來(lái)處理。

后端處理程序

做為tornado驅(qū)動(dòng)的網(wǎng)站,首先要能夠把前面的index.html顯示出來(lái),這個(gè)一般用get方法,顯示的樣式就按照上面的樣子顯示。

用戶填寫(xiě)信息之后,點(diǎn)擊按鈕提交。注意觀察上面的代碼表單中,設(shè)定了post方法,所以,在python程序中,應(yīng)該有一個(gè)post方法專(zhuān)門(mén)來(lái)接收所提交的數(shù)據(jù),然后把提交的數(shù)據(jù)在另外一個(gè)網(wǎng)頁(yè)顯示出來(lái)。

在表單中還要注意,有一個(gè)action=/user,表示的是要將表單的內(nèi)容提交給/user路徑所對(duì)應(yīng)的程序來(lái)處理。這里需要說(shuō)明的是,在網(wǎng)站中,數(shù)據(jù)提交和顯示,路徑是非常重要的。

按照以上意圖,編寫(xiě)如下代碼,并命名為usercontroller.py,保存在template目錄中

#!/usr/bin/env python
#coding:utf-8
import os.path
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
class IndexHandler(tornado.web.RequestHandler):
  def get(self):
    self.render("index.html")
class UserHandler(tornado.web.RequestHandler):
  def post(self):
    user_name = self.get_argument("username")
    user_email = self.get_argument("email")
    user_website = self.get_argument("website")
    user_language = self.get_argument("language")
    self.render("user.html",username=user_name,email=user_email,website=user_website,language=user_language)
handlers = [
  (r"/", IndexHandler),
  (r"/user", UserHandler)
]
template_path = os.path.join(os.path.dirname(__file__),"template")
if __name__ == "__main__":
  tornado.options.parse_command_line()
  app = tornado.web.Application(handlers, template_path)
  http_server = tornado.httpserver.HTTPServer(app)
  http_server.listen(options.port)
  tornado.ioloop.IOLoop.instance().start()

這次代碼量多一些。但是多數(shù)在前面講述tornado基本結(jié)構(gòu)的時(shí)候已經(jīng)說(shuō)過(guò)了,跟前面一樣,這里僅僅把重點(diǎn)的和新出現(xiàn)的進(jìn)行講述,如果對(duì)某些內(nèi)容還有疑問(wèn),可以參考前面的相關(guān)章節(jié)。

在引入的模塊上,多了一個(gè)import os.path,這個(gè)模塊主要用在:

template_path = os.path.join(os.path.dirname(__file),"template")

這是要獲取存放程序的目錄template的路徑。

重點(diǎn)看兩個(gè)類(lèi)中都有的self.render(),用這個(gè)方法引入相應(yīng)的模板。

self.render("index.html")

顯示index.html模板,但是此時(shí)并沒(méi)有向模板網(wǎng)頁(yè)傳遞任何數(shù)據(jù),僅僅顯示罷了。下面一個(gè):

self.render("user.html",username=user_name,email=user_email,website=user_website,language=user_language)

與前面的不同在于,不僅僅是要引用模板網(wǎng)頁(yè)user.html,還要向這個(gè)網(wǎng)頁(yè)傳遞一些數(shù)據(jù),例如username=user_name,含義就是,在模板中,某個(gè)地方是用username來(lái)標(biāo)示得到的數(shù)據(jù),而user_name是此方法中的一個(gè)變量,也就是對(duì)應(yīng)一個(gè)數(shù)據(jù),那么模板中的username也就對(duì)應(yīng)了user_name的數(shù)據(jù),這是通過(guò)username=user_name完成的。后面的變量同理。

那么,user_name的數(shù)據(jù)是哪里來(lái)的呢?就是在index.html頁(yè)面的表單中提交上來(lái)的。注意觀察路徑的設(shè)置,r"/user", UserHandler,也就是在form中的action='/user',就是要將數(shù)據(jù)提交給UserHandler處理,并且是通過(guò)post方法。所以,在UserHandler類(lèi)中,有post()方法來(lái)處理這個(gè)問(wèn)題。通過(guò)self.get_argument()來(lái)接收前端提交過(guò)來(lái)的數(shù)據(jù),接收方法就是,self.get_argument()的參數(shù)與index.html表單form中的各項(xiàng)的name值相同,就會(huì)得到相應(yīng)的數(shù)據(jù)。例如user_name = self.get_argument("username"),就能夠得到index.html表單中name為"username"的元素的值,并賦給user_name變量。

還差一個(gè)網(wǎng)頁(yè)。

顯示結(jié)果

在上面的代碼中,又多了一個(gè)模板:user.html,對(duì)這個(gè)模板,跟前面那個(gè)模板有一點(diǎn)兒不一樣的地方,就是要引入一些變量。它的代碼是這樣的:

<!DOCTYPE html>
<html>
  <head>
    <title>sign in your name</title>
  </head>
  <body>
    <h2>Your Information</h2>
    <p>Your name is {{username}}</p>
    <p>Your email is {{email}}</p>
    <p>Your website is {{website}}, it is very good. This website is make by {{language}}</p>
  </body>
</html>

請(qǐng)將上面的代碼和這句話對(duì)照:

self.render("user.html",username=user_name,email=user_email,website=user_website,language=user_language)

上面的模板代碼存儲(chǔ)為名為user.html的文件,并且和前面已經(jīng)保存的在同一個(gè)目錄中。

看HTML模板代碼中,有類(lèi)似{{username}}的變量,模板中用{{}}引入變量,這個(gè)變量就是在self.render()中規(guī)定的,兩者變量名稱(chēng)一致,對(duì)應(yīng)將相應(yīng)的值對(duì)象引入到模板中。

運(yùn)行結(jié)果

進(jìn)入到template目錄,執(zhí)行:

~/template$ python userscontroller.py

然后在瀏覽器的地址欄中輸入

http://localhost:8000

出現(xiàn)如下圖的表單,并填寫(xiě)表單內(nèi)容

點(diǎn)擊“按鈕”之后:

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • Python Diagrams庫(kù)以代碼形式生成云系統(tǒng)架構(gòu)圖實(shí)例詳解

    Python Diagrams庫(kù)以代碼形式生成云系統(tǒng)架構(gòu)圖實(shí)例詳解

    這篇文章主要介紹了Python Diagrams庫(kù)以代碼形式生成云系統(tǒng)架構(gòu)圖實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python THREADING模塊中的JOIN()方法深入理解

    Python THREADING模塊中的JOIN()方法深入理解

    這篇文章主要介紹了Python THREADING模塊中的JOIN()方法深入理解,本文用簡(jiǎn)潔易懂的語(yǔ)言總結(jié)了對(duì)JOIN()方法的理解,不同于其它文章,需要的朋友可以參考下
    2015-02-02
  • 如何使用pyinstaller打包多個(gè)和單個(gè)python文件詳解

    如何使用pyinstaller打包多個(gè)和單個(gè)python文件詳解

    最近需要將python寫(xiě)的程序打包分發(fā)給其他同事使用,下面這篇文章主要給大家介紹了關(guān)于如何使用pyinstaller打包多個(gè)和單個(gè)python文件的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • python正則表達(dá)式match和search用法實(shí)例

    python正則表達(dá)式match和search用法實(shí)例

    這篇文章主要介紹了python正則表達(dá)式match和search用法,實(shí)例分析了正則表達(dá)式中match和search的功能、定義及相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • PyCharm設(shè)置注釋字體顏色以及是否傾斜的操作

    PyCharm設(shè)置注釋字體顏色以及是否傾斜的操作

    這篇文章主要介紹了PyCharm設(shè)置注釋字體顏色以及是否傾斜的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Django自定義用戶認(rèn)證示例詳解

    Django自定義用戶認(rèn)證示例詳解

    這篇文章主要給大家介紹了關(guān)于Django自定義用戶認(rèn)證的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • python用類(lèi)實(shí)現(xiàn)文章敏感詞的過(guò)濾方法示例

    python用類(lèi)實(shí)現(xiàn)文章敏感詞的過(guò)濾方法示例

    這篇文章主要介紹了python用類(lèi)實(shí)現(xiàn)文章敏感詞的過(guò)濾方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 在python中解決死鎖的問(wèn)題

    在python中解決死鎖的問(wèn)題

    這篇文章主要介紹了在python中解決死鎖的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Python實(shí)現(xiàn)時(shí)間序列變化點(diǎn)檢測(cè)功能

    Python實(shí)現(xiàn)時(shí)間序列變化點(diǎn)檢測(cè)功能

    平穩(wěn)性是時(shí)間序列分析與預(yù)測(cè)的核心概念,在平穩(wěn)條件下,時(shí)間序列的統(tǒng)計(jì)特性(如均值)在時(shí)間維度上保持不變,僅存在隨機(jī)波動(dòng),但是時(shí)間序列通常會(huì)經(jīng)歷結(jié)構(gòu)性斷裂或變化,本文給大家介紹了Python實(shí)現(xiàn)時(shí)間序列變化點(diǎn)檢測(cè)功能,需要的朋友可以參考下
    2024-09-09
  • 使用Python生成F分布表并導(dǎo)出為Excel文件的代碼實(shí)現(xiàn)

    使用Python生成F分布表并導(dǎo)出為Excel文件的代碼實(shí)現(xiàn)

    在統(tǒng)計(jì)分析中,F FF分布是一種非常重要的連續(xù)概率分布,廣泛應(yīng)用于方差分析、回歸分析的顯著性檢驗(yàn)等場(chǎng)景,為了方便查閱和使用F分布的臨界值,本文給大家介紹了使用Python生成F分布表并導(dǎo)出為Excel文件,需要的朋友可以參考下
    2024-11-11

最新評(píng)論

健康| 齐齐哈尔市| 瓮安县| 遵义县| 五原县| 西乡县| 南召县| 渭南市| 阿荣旗| 乐陵市| 大化| 舞钢市| 正宁县| 丽水市| 平舆县| 海丰县| 彰武县| 宜州市| 革吉县| 安福县| 古浪县| 绵竹市| 页游| 宁乡县| 娄烦县| 五常市| 革吉县| 康平县| 澄迈县| 普陀区| 嘉祥县| 浮梁县| 渝中区| 皮山县| 建瓯市| 孟村| 察雅县| 威信县| 利辛县| 灵川县| 吕梁市|