十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
1.在一個文件夾名為www.html3.com的web項目來實現(xiàn),首先到nginx的配置文件nginx.conf做如下配置
python和html混合編寫的文件,我以文件后綴為.phtml,通過服務(wù)器配置讓它重定向到 /rewrite/
目前成都創(chuàng)新互聯(lián)已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、大洼網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
2.進去項目目錄下的static/html/ 編寫一個1.phtml 內(nèi)容如下(內(nèi)容是隨便寫的,只是為了測試)
<%
#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"
%>
phtml
start
I say: <% str_var %>
I say: <% str_var2 %>
end
注意:博主本人的想法是在html文檔前放一對分隔符且只是一個,專門用于處理數(shù)據(jù)與邏輯,而后面的分隔符也就是嵌入到html文檔內(nèi)的那些分隔符,里面只放置一個變量名,用于輸出變量值,因為時間有限,只是簡簡單單實現(xiàn),請諒解!
3.我該項目是flask項目(核心思想與web框架無關(guān)),然后寫個路由,內(nèi)容如下
'''
遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書!
'''
@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變量用于存放匹配到分隔符內(nèi)的字符串,是列表
3.content變量用于存放result列表每個元素解釋后的值,而content[0]放空字符串(因為沒有輸出,result[0]只用于通過exec( )來執(zhí)行字符串語句)
4.測試訪問http://ww.html3.com/static/html/1.phtml
假設(shè)訪問不存在的2.phtml
附:
通配符. 匹配除換行符\n之外的任何單字符
如果要匹配包括換行符的所有字符就不要用(.),用([\s\S])
關(guān)于如何解決貪婪匹配,加?