如何讓python嵌入html實現類似php的快速開發,十分有價值

来源:https://www.cnblogs.com/xxpythonxx/archive/2019/11/29/11960398.html
-Advertisement-
Play Games

1.在一個文件夾名為www.html3.com的web項目來實現,首先到nginx的配置文件nginx.conf做如下配置 python和html混合編寫的文件,我以文件尾碼為.phtml,通過伺服器配置讓它重定向到 /rewrite/ 2.進去項目目錄下的static/html/ 編寫一個1.ph ...


1.在一個文件夾名為www.html3.com的web項目來實現,首先到nginx的配置文件nginx.conf做如下配置
在這裡插入圖片描述
python和html混合編寫的文件,我以文件尾碼為.phtml,通過伺服器配置讓它重定向到 /rewrite/

2.進去項目目錄下的static/html/ 編寫一個1.phtml 內容如下(內容是隨便寫的,只是為了測試)

<%
#define a variable 
str_var = "hello world" 


############# divide  ################
import time
        
if True:                        
        str_var2 = str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
else:
        str_var2 = "nothing"
%>
<!DOCTYPE html>
<html lang="en">
<head>
        <meta charset="UTF-8">
        <title>phtml</title>
        <script>
                
        </script>
</head>
<body>
        <p>start</p>
        <p>I say: <span><% str_var  %></span></p>
        <p>I say: <span><% str_var2 %></span></p>
        <p>end</p>
</body>
</html>

註意:博主本人的想法是在html文檔前放一對分隔符且只是一個,專門用於處理數據與邏輯,而後面的分隔符也就是嵌入到html文檔內的那些分隔符,裡面只放置一個變數名,用於輸出變數值,因為時間有限,只是簡簡單單實現,請諒解!

PS:如有需要Python學習資料的小伙伴可以加點擊下方鏈接自行獲取
note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76

3.我該項目是flask項目(核心思想與web框架無關),然後寫個路由,內容如下

@app.route('/rewrite/')
def rewite():
        url_path = str(request.environ['REQUEST_URI'])[1:]
        if os.path.exists(url_path):
                oFile = open(url_path)
                text = oFile.read()
                pattern = re.compile('<%([\s\S]*?)%>')
                result = pattern.findall(text)
                content = []
                flag = 0
                while flag < len(result):
                        if flag == 0:
                                exec(result[flag].strip())
                                content.append('')
                        else:
                                content.append(locals()[result[flag].strip()])
                        flag += 1

                flag = 0
                def mysub(matched):
                        nonlocal flag
                        flag2 = flag
                        flag += 1
                        return content[flag2]

                res = re.sub('<%[\s\S]*?%>',mysub,text)
                return res
        else:
                return "404 not found"

代碼解釋:

  1.如果有看不懂request.environ['REQUEST_URI'],可以看一下博主之前寫的一篇文章“nginx的rewrite ,如何在flask項目中獲取重寫前的url”

  2.result變數用於存放匹配到分隔符內的字元串,是列表

  3.content變數用於存放result列表每個元素解釋後的值,而content[0]放空字元串(因為沒有輸出,result[0]只用於通過exec( )來執行字元串語句)

4.測試訪問http://ww.html3.com/static/html/1.phtml
在這裡插入圖片描述

在這裡插入圖片描述
假設訪問不存在的2.phtml


附:

通配符.  匹配除換行符\n之外的任何單字元

如果要匹配包括換行符的所有字元就不要用(.),用([\s\S])

關於如何解決貪婪匹配,加?


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、效果圖 二、具體效果實現代碼 1 public static void main(String[] args) { 2 int[][] array = new int[10][10]; 3 int num = 1; 4 for(int i=0;i<array.length;i++){ 5 6 i ...
  • 任何一個java對象都天然繼承於Object類,線上程間實現通信的往往會應用到Object的幾個方法,比如wait(),wait(long timeout),wait(long timeout, int nanos)與notify(),notifyAll()幾個方法實現等待/通知機制,同樣的, 在j... ...
  • 2.1、anaconda的安裝 ​ 1 、安裝可執行程式 ​ 2 、配置環境變數 ​ 根據環境變數的 去查找可執行程式文件,如果查找到就執行,如果查找不到就報錯。 ​ 3 、python的多版本相容問題 ​ 修改可執行程式的文件名,再配置環境變數 ​ 4 、hash案例 2.2、requests模塊 ...
  • 生活中,當你閑暇之餘瀏覽資訊的時候,當你搜索資料但繁雜信息夾雜時候,你就會想,如何更為準確的定位需求信息。今天就為你帶來: 分頁查詢 需求分析:在列表頁面中,顯示指定條數的數據,通過翻頁按鈕完成首頁/上一頁/下一頁/尾頁的查詢 數據分析: 通過觀察,頁面上需要顯示下麵的幾個數據:當前頁:curren ...
  • 安裝 SQLAlchemy 報錯 安裝命令 報錯截圖 編碼錯誤,這裡我們需要改下源碼 解決方案 重新安裝,安裝成功 參數文章: ...
  • 在python3.7 環境下 函數聲明時能在參數後加冒號,如圖: 可能有疑問,python不是動態類型語言 ,難不成還能指定參數類型? 來看一下列印結果: 但同時也確實能傳其他類型的值 如:f("test",123) 那結果如何呢? 如下: 當然會報錯了啊,返回值是一個字元串,int型不能參與字元串 ...
  • student類 package cn.itheima.Manag;/** * *標準類 * **/public class Student { //學號 private String id; //姓名 private String name; //年齡 private String age; // ...
  • 伺服器的監控通過安裝一些常用的監控軟體之外,有時也需要運行一些shell或Python腳本;shell下可以使用系統自帶的ps/free/top/df等shell命令,Python可以調用subprocess等模塊來運行shell命令,不過這麼做就比較麻煩。這裡有一個比較好用的第三方模塊:psuti ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...