今天開始就要進(jìn)入正題了,。大家都準(zhǔn)備好了吧~ 代碼提示 先和大家說個(gè)小知識點(diǎn):有同學(xué)后臺說輸入flask代碼pycharm不提示,,現(xiàn)在告訴你一個(gè)解決方法:app = Flask(__name__) # type: Flask 在上面代碼后面加上# type: Flask 就會提示啦。 URL與視圖函數(shù)的映射url與視圖函數(shù)的映射是通過@app.route() 裝飾器實(shí)現(xiàn)的,。 # coding: utf-8
from flask import Flask
# __name__是用來確定flask運(yùn)行的主文件 app = Flask(__name__) # type: Flask app.debug = True
# app.config.from_object('configs')
@app.route('/') def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
上面代碼`@app.route('/')`裝飾器傳參只有一個(gè)斜杠/,這時(shí)候運(yùn)行代碼就會跳轉(zhuǎn)到根目錄——首頁,。如圖:
URL傳參是通過`<參數(shù)名稱>`的形式進(jìn)行傳遞。另外,,URL中有幾個(gè)參數(shù),,在視圖函數(shù)中也要指定幾個(gè)參數(shù)。參數(shù)名稱可以自己定義,,代碼如下: # coding: utf-8
from flask import Flask
# __name__是用來確定flask運(yùn)行的主文件 app = Flask(__name__) # type: Flask app.debug = True
# app.config.from_object('configs') # 根目錄 @app.route('/') def hello_world():
return 'Hello World!'
# 傳參 @app.route('/content/<username>/<password>/')
def login(username, password):
return u'我的用戶名是:%s,,密碼是:%s' % (username, password)
if __name__ == '__main__':
app.run()
執(zhí)行代碼后,在瀏覽器輸入你設(shè)置的地址可以看到: 需要注意的是,,上面<>里面寫的參數(shù)名稱必須和你def函數(shù)里傳參名稱相同,,比如我寫的參數(shù)名叫username,那么我代碼里login后面的形參名稱必須叫username,,上面代碼我傳了兩個(gè)參數(shù),,地址寫的時(shí)候分別傳了warrior和123。 1)如果沒有指定,,默認(rèn)是string 類型 2)string:字符串,接收任何沒有斜杠/的字符,。 3)int:整型 4)float:浮點(diǎn)類型 5)path:和string類似,,但是可以接收斜杠/ 6)uuid:只接收uuid字符串 7)any:可以指定多個(gè)路徑
例如,現(xiàn)在我們指定一個(gè)參數(shù)為int類型:# coding: utf-8
from flask import Flask
# __name__是用來確定flask運(yùn)行的主文件 app = Flask(__name__) # type: Flask app.debug = True
# 根目錄 @app.route('/') def hello_world():
return 'Hello World!'
# @app.route('/content/<username>/<password>/') # def login(username, password):
# return u'我的用戶名是:%s,,密碼是:%s' % (username, password)
@app.route('/content/<int:username>/<int:password>/') def login(username, password):
return u'我的用戶名是:%s,,密碼是:%s' % (username, password)
if __name__ == '__main__':
app.run()
在頁面中我傳入兩個(gè)1,,可以看到: 但是當(dāng)我傳入warrior和1以后就找不到頁面了,因?yàn)閣arrior不是int類型: uuid 接下來簡單說一下uuid,,因?yàn)閡uid在傳參的時(shí)候更長用,,uuid就是唯一的一串字符,永遠(yuǎn)不會出現(xiàn)重復(fù),,比如: # coding: utf-8
from flask import Flask import uuid
app = Flask(__name__) # type: Flask app.debug = True
# 根目錄 @app.route('/') def hello_world():
return 'Hello World!'
# @app.route('/content/<username>/<password>/') # def login(username, password):
# return u'我的用戶名是:%s,,密碼是:%s' % (username, password)
@app.route('/content/<uuid:username>/') def login(username):
return u'我的用戶名是:%s' % (username)
print uuid.uuid4()
if __name__ == '__main__':
app.run()
上面代碼中我們先導(dǎo)入了import uuid 模塊,然后通過print uuid.uuid4() 打印出了一串uuid: 這時(shí)候因?yàn)槲覀冎付藆sername是uuid類型的,,所以當(dāng)我們進(jìn)入http://127.0.0.1:5000/content/1/ 的時(shí)候就會找不到地址,,我們將控制臺打印的uuid替換1:http://127.0.0.1:5000/content/7bdcd04c-62fd-48e8-b12b-bbd636cd0315/ 就可以看到: any any就是指定傳遞的任意參數(shù),比如下面代碼我們指定傳參為username或者blog,,那么我們在URL中輸入username或者blog都會鏈接到指定頁面,,輸入any指定參數(shù)以外的內(nèi)容頁面則會報(bào)錯(cuò): # coding: utf-8
from flask import Flask import flask import uuid
app = Flask(__name__) # type: Flask app.debug = True
# 根目錄 @app.route('/') def hello_world():
return 'Hello World!'
# @app.route('/content/<username>/<password>/') # def login(username, password):
# return u'我的用戶名是:%s,密碼是:%s' % (username, password)
@app.route('/content/<uuid:username>/') def login(username):
return u'我的用戶名是:%s' % (username)
@app.route('/post/<any(username,blog):name>/') def post_info(name):
return u'id是:%s' % name
print uuid.uuid4()
if __name__ == '__main__':
app.run()
參數(shù)傳遞 最后我們來說一下參數(shù)傳遞,。理論上推薦path——接收帶斜杠的字符串形式傳遞參數(shù),,因?yàn)檫@樣有利于網(wǎng)站的SEO即網(wǎng)站在搜索引擎結(jié)果的排名: @app.route('/post/<path:username>/') def user(username):
return u'用戶名字是:%s' % username
另一種傳參方式就是大部分網(wǎng)站在用的?path=1&username=warrior 這種查詢字符串的方式: @app.route('/post/') def question():
post_id = flask.request.args.get('post_id') return u'post_id是:%s' % post_id
上面flask.request.args.get('post_id') 就是獲取地址里的傳參: 至于想用哪種方式,就看你是不是在乎自己網(wǎng)站在搜索引擎中的排名啦~ 這一節(jié)內(nèi)容稍微有點(diǎn)多,,大家慢慢消化,,最后把代碼貼給大家,供大家參考: # coding: utf-8
from flask import Flask import flask import uuid
# __name__是用來確定flask運(yùn)行的主文件 app = Flask(__name__) # type: Flask app.debug = True
# 根目錄 @app.route('/') def hello_world():
return 'Hello World!'
# @app.route('/content/<username>/<password>/') # def login(username, password):
# return u'我的用戶名是:%s,,密碼是:%s' % (username, password)
# uuid @app.route('/content/<uuid:username>/') def login(username):
return u'我的用戶名是:%s' % (username)
# any @app.route('/post/<any(username,blog):name>/') def post_info(name):
return u'id是:%s' % name
# path @app.route('/post/<path:username>/') def user(username):
return u'用戶名字是:%s' % username
# ?id=1&user=warrior形式傳遞參數(shù) @app.route('/post/') def question():
post_id = flask.request.args.get('post_id') return u'post_id是:%s' % post_id print uuid.uuid4()
if __name__ == '__main__':
app.run()
感謝@zuz5的贊賞和提的建議~~
|